From 89efd093fc43c1395a90d4d0b7a831caac76b3ce Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Fri, 22 Apr 2022 23:28:43 +0200 Subject: [PATCH 01/36] Collect package_data_fields correctly in CSV We now collect package_data_fields corectly for use in CSVs Signed-off-by: Philippe Ombredanne --- src/formattedcode/output_csv.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/formattedcode/output_csv.py b/src/formattedcode/output_csv.py index 2a209cbf5af..2bad83a5881 100644 --- a/src/formattedcode/output_csv.py +++ b/src/formattedcode/output_csv.py @@ -6,6 +6,7 @@ # See https://github.com/nexB/scancode-toolkit for support or download. # See https://aboutcode.org for more information about nexB OSS projects. # +import attr import csv import saneyaml @@ -231,6 +232,8 @@ def get_package_columns(_columns=set()): from packagedcode.models import PackageData + package_data_fields = [field.name for field in attr.fields(PackageData)] + # exclude some columns for now that contain list of items excluded_columns = { # list of strings @@ -252,7 +255,7 @@ def get_package_columns(_columns=set()): 'notice_url', ] - fields = PackageData.fields() + extra_columns + fields = package_data_fields + extra_columns _columns = set(f for f in fields if f not in excluded_columns) return _columns From 3558de4136d5af21933f10a3812d5afa8acdbb37 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Fri, 22 Apr 2022 23:30:10 +0200 Subject: [PATCH 02/36] Streamline get_package_data() API Signed-off-by: Philippe Ombredanne --- src/scancode/api.py | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/scancode/api.py b/src/scancode/api.py index c7c49056a55..a68cac9864e 100644 --- a/src/scancode/api.py +++ b/src/scancode/api.py @@ -295,7 +295,7 @@ def _licenses_data_from_match( SCANCODE_DEBUG_PACKAGE_API = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False) -def _get_package_data(location): +def _get_package_data(location, **kwargs): """ Return a mapping of package manifest information detected in the file at `location`. @@ -304,12 +304,10 @@ def _get_package_data(location): """ from packagedcode.recognize import recognize_package_data try: - recognized_package_data = recognize_package_data(location) - if recognized_package_data: - return recognized_package_data + return recognize_package_data(location) or [] except Exception as e: if TRACE: - logger.error('_get_package_data: {}: Exception: {}'.format(location, e)) + logger.error(f'_get_package_data: location: {location!r}: Exception: {e}') if SCANCODE_DEBUG_PACKAGE_API: raise @@ -329,31 +327,20 @@ def get_package_info(location, **kwargs): DeprecationWarning, stacklevel=1 ) - - recognized_packages = _get_package_data(location) - - if recognized_packages: - return dict(packages=[ - packages.to_dict() - for packages in recognized_packages - ]) - return dict(packages=[]) + packages = _get_package_data(location, **kwargs) or [] + return dict(packages=[p.to_dict() for p in packages]) def get_package_data(location, **kwargs): """ Return a mapping of package manifest information detected in the file at `location`. """ - recognized_package_data = _get_package_data(location) - - if recognized_package_data: - return dict(package_data=[ - package_data.to_dict() - for package_data in recognized_package_data - ]) - - return dict(package_data=[]) + if TRACE: + print(' scancode.api.get_package_data: kwargs', kwargs) + + package_datas = _get_package_data(location, **kwargs) or [] + return dict(package_data=[pd.to_dict() for pd in package_datas]) def get_file_info(location, **kwargs): From affa5a9ced9c51ad179f7a2482741376b39cfcc4 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Fri, 22 Apr 2022 23:31:20 +0200 Subject: [PATCH 03/36] Pass the Resource.id to scanner functions Also apply minor formatting and cosmetic changes Signed-off-by: Philippe Ombredanne --- src/scancode/cli.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/scancode/cli.py b/src/scancode/cli.py index 3b52e03d6a9..b977716ebb9 100644 --- a/src/scancode/cli.py +++ b/src/scancode/cli.py @@ -470,7 +470,7 @@ def scancode( **kwargs ) - #echo outdated message if newer version is available + # echo outdated message if newer version is available if not quiet and outdated: echo_stderr(outdated, fg='yellow') @@ -879,7 +879,7 @@ def echo_func(*_args, **_kwargs): success = success and pre_scan_success ######################################################################## - # 6. run scans. + # Run scans ######################################################################## scan_success = run_scanners( @@ -897,7 +897,7 @@ def echo_func(*_args, **_kwargs): success = success and scan_success ######################################################################## - # 7. run postscans + # Run postscans ######################################################################## # TODO: add progress indicator @@ -915,7 +915,7 @@ def echo_func(*_args, **_kwargs): success = success and post_scan_success ######################################################################## - # 8. apply output filters + # Apply output filters ######################################################################## # TODO: add progress indicator @@ -933,7 +933,7 @@ def echo_func(*_args, **_kwargs): success = success and output_filter_success ######################################################################## - # 9. save outputs + # Save outputs ######################################################################## counts = codebase.compute_counts(skip_root=strip_root, skip_filtered=True) @@ -967,7 +967,7 @@ def echo_func(*_args, **_kwargs): success = success and output_success ######################################################################## - # 9. display summary + # Display summary ######################################################################## codebase.timings['total'] = time() - processing_start @@ -984,7 +984,7 @@ def echo_func(*_args, **_kwargs): ) ######################################################################## - # 10. optionally assemble results to return + # Optionally assemble results to return ######################################################################## if return_results: # the structure is exactly the same as the JSON output @@ -1112,8 +1112,7 @@ def run_scanners( progress_manager = None if not quiet: - echo_func('Scan files for: %(scan_names)s ' - 'with %(processes)d process(es)...' % locals()) + echo_func(f'Scan files for: {scan_names} with {processes} process(es)...') item_show_func = partial(path_progress_message, verbose=verbose) progress_manager = partial(progressmanager, item_show_func=item_show_func, @@ -1370,7 +1369,7 @@ def scan_resource( else: deadline = sys.maxsize - runner = partial(scanner.function, location, deadline=deadline) + runner = partial(scanner.function, location, rid=rid, deadline=deadline) error, values_mapping = interruptor(runner, timeout=timeout) if error: msg = 'ERROR: for scanner: ' + scanner.name + ':\n' + error From f3cdfb481ba73e6c6096a7d770ec7dbb67f9a7f4 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Fri, 22 Apr 2022 23:32:21 +0200 Subject: [PATCH 04/36] Remove package and dependency uuid from tests In tests scans the UUID are best left out for stability of expected results Signed-off-by: Philippe Ombredanne --- src/scancode/cli_test_utils.py | 100 ++++++++++++--------------------- 1 file changed, 37 insertions(+), 63 deletions(-) diff --git a/src/scancode/cli_test_utils.py b/src/scancode/cli_test_utils.py index 74bcd38c883..e6e947677ae 100644 --- a/src/scancode/cli_test_utils.py +++ b/src/scancode/cli_test_utils.py @@ -41,7 +41,7 @@ def run_scan_plain( if not env: env = dict(os.environ) - scmd = u'scancode' + scmd = 'scancode' scan_cmd = os.path.join(scancode_root_dir, scmd) rc, stdout, stderr = execute( cmd_loc=scan_cmd, @@ -173,8 +173,7 @@ def check_json_scan( regen=False, remove_file_date=False, check_headers=False, - remove_instance_uuid=False, - ignore_instance_uuid=False, + remove_uuid=True, ): """ Check the scan `result_file` JSON results against the `expected_file` @@ -186,31 +185,26 @@ def check_json_scan( If `remove_file_date` is True, the file.date attribute is removed. If `check_headers` is True, the scan headers attribute is not removed. - If `remove_instance_uuid` is True, removes UUID qualifiers from instance UUIDs. - If `ignore_instance_uuid` is True, skips checking UUID qualifiers from instance UUIDs + If `remove_uuid` is True, removes UUID from Package and Dependency. and if also `regen` is True then regenerate expected file with old UUIDs present already. """ - results = load_json_result(result_file, remove_file_date) - - if remove_instance_uuid or ignore_instance_uuid: + results = load_json_result(location=result_file, remove_file_date=remove_file_date) + if remove_uuid: results = remove_uuid_from_scan(results) if regen: - if ignore_instance_uuid: - results = load_json_result(result_file, remove_file_date) - with open(expected_file, 'w') as reg: json.dump(results, reg, indent=2, separators=(',', ': ')) - - expected = load_json_result(expected_file, remove_file_date) + expected = results + else: + expected = load_json_result(location=expected_file, remove_file_date=remove_file_date) + if remove_uuid: + expected = remove_uuid_from_scan(expected) if not check_headers: results.pop('headers', None) expected.pop('headers', None) - if remove_instance_uuid or ignore_instance_uuid: - expected = remove_uuid_from_scan(expected) - # NOTE we redump the JSON as a YAML string for easier display of # the failures comparison/diff if results != expected: @@ -221,61 +215,41 @@ def check_json_scan( def remove_uuid_from_scan(results): """ - In `results` data mapping remove `uuid` qualifiers from all the - `package_uuid fields` in `packages` and `dependency_uuid` fields in `dependencies`. - - UUID fields are generated uniquely and would cause test failures + Remove Package and Dependency UUIDs from a ``results` mapping of scan data . + UUID fields are generated uniquely and would cause test failures when comparing results and expected. """ - modified_results = results.copy() + for package in (results.get('packages') or []): + package_uid = package.get('package_uid') + if package_uid: + package['package_uid'] = purl_with_fake_uuid(package_uid) - remove_uuid_from_instances( - instances=modified_results["dependencies"], - uuid_string_fields=["dependency_uuid", "for_package"], - ) + for dependency in (results.get('dependencies') or []): + dependency_uid = dependency.get('dependency_uid') + if dependency_uid: + dependency['dependency_uid'] = purl_with_fake_uuid(dependency_uid) - remove_uuid_from_instances( - instances=modified_results["packages"], - uuid_string_fields=["package_uuid"], - ) + for_package_uid = dependency.get('for_package_uid') + if for_package_uid: + dependency['for_package_uid'] = purl_with_fake_uuid(for_package_uid) - remove_uuid_from_instances( - instances=modified_results["files"], - uuid_list_fields=["for_packages"], - ) + for resource in (results.get('files') or []): + for_packages = [] + has_packages = False + for fpkg in (resource.get('for_packages') or []): + has_packages = True + for_packages.append(purl_with_fake_uuid(fpkg)) - return modified_results + if has_packages: + resource['for_packages'] = for_packages + return results -def remove_uuid_from_instances(instances, uuid_string_fields=[], uuid_list_fields=[]): - """ - Remove UUIDs from each of the instances in a list of instances (like files/packages/dependencies), - given the list of `uuid_string_fields` and/or `uuid_list_fields` from which to remove the UUIDs from. - """ - new_instances = [] - - for instance in instances: - - for uuid_string_field in uuid_string_fields: - uuid_string = instance.get(uuid_string_field, None) - if uuid_string: - purl = PackageURL.from_string(uuid_string) - purl.qualifiers.pop("uuid", None) - instance[uuid_string_field] = purl.to_string() - - for uuid_list_field in uuid_list_fields: - uuid_list = instance.get(uuid_list_field, None) - if uuid_list: - new_uuids = [] - for uuid in uuid_list: - purl = PackageURL.from_string(uuid) - purl.qualifiers.pop("uuid", None) - new_uuids.append(purl.to_string()) - instance[uuid_list_field] = new_uuids - - new_instances.append(instance) - - return new_instances + +def purl_with_fake_uuid(purl): + purl = PackageURL.from_string(purl) + purl.qualifiers['uuid'] = 'fixed-uid-done-for-testing-5642512d1758' + return purl.to_string() def load_json_result(location, remove_file_date=False): From 6ab35658bc76b6b4c0acb3a3c290c692df3b15d2 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Fri, 22 Apr 2022 23:49:07 +0200 Subject: [PATCH 05/36] Refine package models * Rename PackageFile to FileReference and update definition * Rename PackageDataFile to DatafileHandler * Streamline class hierarchy * Move PackageDataFile subclasses to misc.py In Dependency: * add for_package_uid, datafile_path, datasource_id * rename dependency_uuid to dependency_uid In Package * add package_uid, datafile_paths, datasource_ids In PackageData: * remove contains_source_code from * add file_references using FileReference, and remove installed_files * all *_url computed URLs are now stored * remove extra_key_files and extra_root_files properties Signed-off-by: Philippe Ombredanne --- src/packagedcode/models.py | 1674 +++++++++-------- .../data/csv/flatten_scan/full.json | 2 - .../data/csv/flatten_scan/full.json-expected | 6 +- .../package_license_value_null.json | 1 - .../package_license_value_null.json-expected | 3 +- .../data/csv/livescan/expected.csv | 46 +- .../data/csv/packages/expected-no-root.csv | 6 +- .../data/csv/packages/expected.csv | 8 +- tests/formattedcode/test_output_csv.py | 2 +- .../package/package.expected.json | 41 +- .../scan.expected.json | 32 +- tests/licensedcode/test_plugin_license.py | 2 +- .../test_plugin_licenses_reference.py | 2 +- .../scancode/data/only_findings/expected.json | 1 - 14 files changed, 937 insertions(+), 889 deletions(-) diff --git a/src/packagedcode/models.py b/src/packagedcode/models.py index 42bf0f2684a..54597410142 100644 --- a/src/packagedcode/models.py +++ b/src/packagedcode/models.py @@ -7,15 +7,16 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import fnmatch -import logging import os -import sys +import uuid +from fnmatch import fnmatchcase +import logging import attr from packageurl import normalize_qualifiers from packageurl import PackageURL +from commoncode import filetype from commoncode.datautils import choices from commoncode.datautils import Boolean from commoncode.datautils import Date @@ -23,117 +24,153 @@ from commoncode.datautils import List from commoncode.datautils import Mapping from commoncode.datautils import String -from commoncode.datautils import TriBoolean - -from commoncode import filetype -from commoncode.fileutils import file_name -from commoncode.fileutils import splitext_name +from commoncode.fileutils import as_posixpath from typecode import contenttype - """ -Data models for package information and dependencies, and also data models -for package data for abstracting the differences existing between -package formats and tools. - -A package has a somewhat fuzzy definition and is code that can be consumed and -provisioned by a package manager or can be installed. +This module contain data models for package and dependencies, abstracting and +normalizing the small differences that exist across different package types +(aka. ecosystems), manifest file formats and tools. -It can be a single file such as script; more commonly a package is stored in an -archive or directory. +A package is a unit of code that is provisioned and installable. More commonly a +package is stored in an archive and found in a package repository, though it can +be as simple as a single file such as a script or may be stored in a VCS +repository such as git. A package contains: - - information typically in a "manifest" file, - - a payload of code, doc, data. -Structured package information are found in multiple places: -- in manifest file proper (such as a Maven POM, NPM package.json and many others) -- in binaries (such as an Elf or LKM, Windows PE or RPM header). -- in code (JavaDoc tags or Python __copyright__ magic) + - package information and metadata in some "manifest" file, + - a payload such as code, documentation, or data. + + +Structured package information come in three primary kinds: -There are collectively named "manifests" in ScanCode. +- "metadata" such as a name, version or description, + +- "dependencies" on other packages either potential with version requirements or + resolved and locked with concrete versions), and + +- "build" and packaging scripts and instructions. + +Package types combine these in one or more manifest or script that we +collectively call datafiles. For instance a Maven POM XML file contains combined +metadata, dependencies and build instructions in an XML file while a pip +requirements.txt file contains only dependencies. + +These package "data" files come in many different shapes: + +- Manifest files proper such as a Maven POM, NPM package.json and several others. +- Dependency lockfiles such as pip requirements.txt or Go go.sum. +- Build scripts such as Makefile. +- Various structured or semi-structured metadata files in JSON, YAML or plain text +- Property files that supplement manifests such as a pom.properties +- Structured data headers or sections in binaries such as in an ELF, LKM or + Windows PE; or the header of an RPM archive. +- Code tags or conventional variables such JavaDoc tags or Python __copyright__ + magic variables and variable in Yocto/Bitbake. +- In JSON datafiles (or similar) fetched from registry or package repository APIs. We handle package information at two levels: -1. package data information collected in a "manifest" or similar at a file level -2. packages at the codebase level, where a package contains - one or more package data, and files for that package. +- First, we parse manifests or lockfiles in a common package data model. + +- Second, we assemble lists of top-level Package and Dependency by aggregating + the data from one or more parsed package datafiles. + +The key models defined here are: + +- PackageData: a class holding package data as parsed from a package datafile + such as a manifest or lockfile. -The second requires the first to be computed. +- Package: a class for a top level package instance with a UUID. +- Dependency: class used for a top level dependency instance with a UUID -These are case classes to extend: +- DatafileHandler: a base class for datafile handlers. Each handler can parse() + manifest file format in PackageData and can optionally assemble() packages and + dependencies. When implementing a new package type and manifest file format, + subclass DatafileHandler and implement the parse() and assemble() methods for + this package datafile format and package type. Then register this class in + ``packagedcode.PACKAGE_DATAFILE_HANDLERS``. -- PackageData: - Base class with shared package attributes and methods. -- PackageDataFile: - Mixin class that represents a specific package manifest file. -- Package: - Mixin class that represents a package that's constructed from one or more - package data. It also tracks package files. Basically a package instance. -Here is an example of the classes that would need to exist to support a new fictitious -package type or ecosystem `dummy`. +Beyond these we have a few secondary models: -- DummyPackageData(PackageData): - This class provides type wide defaults and basic implementation for type specific methods. -- DummyManifest(DummyPackageData, PackageDataFile) or DummyLockFile(DummyPackageData, PackageDataFile): - This class provides methods to recognize and parse a package manifest file format. -- DummyPackage(DummyPackageData, Package): - This class provides methods to create package instances for one or more manifests and to - collect package file paths. +- ModelMixin: the base mixin for all models with generic creation and + serialization to a dict methods. + +- Party, DependentPackage, FileReference: lists of these objects used in PackageData + +- IdentifiablePackageData: a base class for a Package-like class with a Package URL. """ SCANCODE_DEBUG_PACKAGE_API = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False) -TRACE = False or SCANCODE_DEBUG_PACKAGE_API -TRACE_MERGING = False or SCANCODE_DEBUG_PACKAGE_API +TRACE = SCANCODE_DEBUG_PACKAGE_API +TRACE_UPDATE = SCANCODE_DEBUG_PACKAGE_API def logger_debug(*args): pass logger = logging.getLogger(__name__) -if TRACE or TRACE_MERGING: - import logging - +if TRACE or TRACE_UPDATE: + import sys logging.basicConfig(stream=sys.stdout) logger.setLevel(logging.DEBUG) def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - - logger_debug = print + return logger.debug( + ' '.join(isinstance(a, str) and a or repr(a) for a in args) + ) -class BaseModel(object): +class ModelMixin: """ - Base class for all package models. + Base mixin for all package models. """ def to_dict(self, **kwargs): """ - Return an dict of primitive Python types. + Return a mapping of primitive Python types. """ return attr.asdict(self) - @classmethod - def create(cls, **kwargs): + def to_tuple(self, **kwargs): """ - Return an object built from ``kwargs``. Always ignore unknown attributes - provided in ``kwargs`` that do not exist as declared attr fields in - ``cls``. + Return a hashable tuple of primitive Python types. """ - known_attr = cls.fields() - kwargs = {k: v for k, v in kwargs.items() if k in known_attr} - return cls(**kwargs) - + return to_tuple(self.to_dict(**kwargs)) @classmethod - def fields(cls): + def from_dict(cls, mapping): """ - Return a list of field names defined on this model. + Return an object built from ``kwargs`` mapping. Always ignore unknown + attributes provided in ``kwargs`` that do not exist as declared attributes + in the ``cls`` class. """ - return list(attr.fields_dict(cls)) + known_attr = attr.fields_dict(cls) + kwargs = {k: v for k, v in mapping.items() if k in known_attr} + return cls(**kwargs) + + +def to_tuple(collection): + """ + Return a tuple of basic Python values by recursively converting a mapping + and all its sub-mappings. + For example:: + >>> to_tuple({7: [1,2,3], 9: {1: [2,6,8]}}) + ((7, (1, 2, 3)), (9, ((1, (2, 6, 8)),))) + """ + if isinstance(collection, dict): + collection = tuple(collection.items()) + assert isinstance(collection, (tuple, list)) + results = [] + for item in collection: + if isinstance(item, (list, tuple, dict)): + results.append(to_tuple(item)) + else: + results.append(item) + return tuple(results) party_person = 'person' @@ -149,8 +186,8 @@ def fields(cls): ) -@attr.s() -class Party(BaseModel): +@attr.attributes(slots=True) +class Party(ModelMixin): """ A party is a person, project or organization related to a package. """ @@ -185,43 +222,18 @@ class Party(BaseModel): help='URL to a primary web page for this party.') -@attr.s() -class BasePackageData(BaseModel): +@attr.attributes(slots=True) +class IdentifiablePackageData(ModelMixin): """ - A base identifiable package object using discrete identifying attributes as + Identifiable package data object using purl as identifying attribute as specified here https://github.com/package-url/purl-spec. + This base class is used for all package-like objects be they a manifest + or an actual package instance. """ - - # class-level attributes used to recognize a package - filetypes = tuple() - mimetypes = tuple() - extensions = tuple() - - # list of known metafiles for a package type - file_patterns = tuple() - - # Optional. Public default web base URL for package homepages of this - # package type on the default repository. - default_web_baseurl = None - - # Optional. Public default download base URL for direct downloads of this - # package type the default repository. - default_download_baseurl = None - - # Optional. Public default API repository base URL for package API calls of - # this package type on the default repository. - default_api_baseurl = None - - # Optional. Public default type for a package class. - default_type = None - - # TODO: add description of the Package type for info - # type_description = None - type = String( repr=True, label='package type', - help='Optional. A short code to identify what is the type of this ' + help='A short code to identify what is the type of this ' 'package. For instance gem for a Rubygem, docker for container, ' 'pypi for Python Wheel or Egg, maven for a Maven Jar, ' 'deb for a Debian package, etc.') @@ -229,7 +241,7 @@ class BasePackageData(BaseModel): namespace = String( repr=True, label='package namespace', - help='Optional namespace for this package.') + help='Namespace for this package.') name = String( repr=True, @@ -239,65 +251,39 @@ class BasePackageData(BaseModel): version = String( repr=True, label='package version', - help='Optional version of the package as a string.') + help='Version of the package as a string.') qualifiers = Mapping( default=None, value_type=str, converter=lambda v: normalize_qualifiers(v, encode=False), label='package qualifiers', - help='Optional mapping of key=value pairs qualifiers for this package') + help='Mapping of key=value pairs qualifiers for this package') subpath = String( label='extra package subpath', - help='Optional extra subpath inside a package and relative to the root ' + help='Subpath inside a package and relative to the root ' 'of this package') - def __attrs_post_init__(self, *args, **kwargs): - if not self.type and hasattr(self, 'default_type'): - self.type = self.default_type - @property def purl(self): """ - Return a compact purl package URL string. - """ - if not self.name: - return - return PackageURL( - self.type, self.namespace, self.name, self.version, - self.qualifiers, self.subpath).to_string() - - def repository_homepage_url(self, baseurl=default_web_baseurl): - """ - Return the package repository homepage URL for this package, e.g. the - URL to the page for this package in its package repository. This is - typically different from the package homepage URL proper. - Subclasses should override to provide a proper value. - """ - return - - def repository_download_url(self, baseurl=default_download_baseurl): - """ - Return the package repository download URL to download the actual - archive of code of this package. This may be different than the actual - download URL and is computed from the default public respoitory baseurl. - Subclasses should override to provide a proper value. + Return a compact Package URL string or None. """ - return - - def api_data_url(self, baseurl=default_api_baseurl): - """ - Return the package repository API URL to obtain structured data for this - package such as the URL to a JSON or XML api. - Subclasses should override to provide a proper value. - """ - return + if self.name: + return PackageURL( + type=self.type, + namespace=self.namespace, + name=self.name, + version=self.version, + qualifiers=self.qualifiers, + subpath=self.subpath, + ).to_string() def set_purl(self, package_url): """ - Update this Package object with the `package_url` purl string or - PackageURL attributes. + Update this object with the ``package_url`` purl string or PackageURL if + there is no pre-existing value for a given purl attribute. """ if not package_url: return @@ -305,50 +291,26 @@ def set_purl(self, package_url): if not isinstance(package_url, PackageURL): package_url = PackageURL.from_string(package_url) - attribs = ['type', 'namespace', 'name', 'version', 'qualifiers', 'subpath'] - for att in attribs: - self_val = getattr(self, att) - purl_val = getattr(package_url, att) - if not self_val and purl_val: - setattr(self, att, purl_val) + for key, value in package_url.to_dict().items(): + self_val = getattr(self, key) + if not self_val and value: + setattr(self, attr, value) def to_dict(self, **kwargs): - """ - Return an dict of primitive Python types. - """ - mapping = attr.asdict(self) - if self.name: - mapping['purl'] = self.purl - mapping['repository_homepage_url'] = self.repository_homepage_url() - mapping['repository_download_url'] = self.repository_download_url() - mapping['api_data_url'] = self.api_data_url() - else: - mapping['purl'] = None - mapping['repository_homepage_url'] = None - mapping['repository_download_url'] = None - mapping['api_data_url'] = None + mapping = super().to_dict(**kwargs) + mapping['purl'] = self.purl if self.qualifiers: mapping['qualifiers'] = normalize_qualifiers( qualifiers=self.qualifiers, encode=False, ) - return mapping - @classmethod - def create(cls, **kwargs): - """ - Return a Package built from ``kwargs``. Always ignore unknown attributes - provided in ``kwargs`` that do not exist as declared attr fields in - ``cls``. - """ - from packagedcode import get_package_class - type_cls = get_package_class(kwargs, default=cls) - return super(BasePackageData, type_cls).create(**kwargs) + return mapping -@attr.s() -class DependentPackage(BaseModel): +@attr.attributes(slots=True) +class DependentPackage(ModelMixin): """ An identifiable dependent package package object. """ @@ -363,9 +325,9 @@ class DependentPackage(BaseModel): extracted_requirement = String( repr=True, - label='dependent package version requirement', - help='A string defining version(s)requirements. Package-type specific ' - 'and as found in the lockfile/package-data.') + label='extracted version requirement', + help='String for the original version requirements and constraints. ' + 'Package-type specific and as found originally in a datafile.') # ToDo: add `vers` support. See https://github.com/nexB/univers/blob/main/src/univers/version_range.py @@ -394,77 +356,164 @@ class DependentPackage(BaseModel): resolved_package = Mapping( label='resolved package data', - help='A mapping containing the package data for this DependentPackage, ' - 'resolved from the lockfile itself or by fetching from other sources.') + help='A mapping of resolved package data for this dependent package, ' + 'either from the datafile or collected from another source. Some ' + 'lockfiles for Composer or Cargo contain extra dependency data.' + ) -@attr.s +@attr.attributes(slots=True) class Dependency(DependentPackage): + """ + Top-level dependency instance from parsed package data collected from data + files such as a package manifest or lockfile. + """ + dependency_uid = String( + label='Dependency unique id', + help='A unique identifier for this dependency instance.' + 'Consists of the dependency purl with a UUID qualifier.' + ) - dependency_uuid = String( - label='Dependency instance UUID', - help='A unique ID for dependency instances in a codebase scan.' - 'Consists of a pURL and an UUID field as a pURL qualifier.' + # TODO: should we also repeat the purl here: this may be redundant but this + # would help avoid lookups + for_package_uid = String( + label='A Package unique id', + help='The unique id of the package instance to which this dependency ' + 'file belongs. This is the purl with a uuid qualifier.' ) - for_package = String( - label='A Package UUID', - help='The UUID of the package instance to which this dependency file belongs' + datafile_path = String( + label='Path to datafile.', + help='A POSIX path string to the package datafile that describes this ' + 'dependency.' ) - lockfile = String( - label='path to a lockfile', - help='A path string from where this dependency instance was created' - 'Consists of a pURL and an UUID field as a pURL qualifier.' + datasource_id = String( + label='datasource id', + help='Datasource identifier for the source of these package data.' ) + def __attrs_post_init__(self, *args, **kwargs): + if not self.dependency_uid: + self.dependency_uid = build_package_uid(self.purl) + + @classmethod + def from_dependent_package( + cls, + dependent_package, + datafile_path, + datasource_id, + package_uid=None, + ): + """ + Return a Dependency from a ``dependent_package`` DependentPackage object + or mapping. + """ + if isinstance(dependent_package, DependentPackage): + dependent_package = dependent_package.to_dict() + else: + # make a copy + dependent_package = dict(dependent_package) + + dependent_package['datafile_path'] = datafile_path + dependent_package['datasource_id'] = datasource_id + dependent_package['for_package_uid'] = package_uid + + return cls.from_dict(dependent_package) + + @classmethod + def from_dependent_packages( + cls, + dependent_packages, + datafile_path, + datasource_id, + package_uid=None, + ): + """ + Yield Dependency objects from a ``dependent_packages`` list of + DependentPackage object or mappings found in the ``datafile_path`` with + ``datasource_id`` for the ``package_uid``. + """ + dependent_packages = dependent_packages or [] + for dependent_package in dependent_packages: + yield Dependency.from_dependent_package( + dependent_package=dependent_package, + datafile_path=datafile_path, + datasource_id=datasource_id, + package_uid=package_uid, + ) + -@attr.s() -class PackageFile(BaseModel): +@attr.attributes(slots=True) +class FileReference(ModelMixin): """ - A file that belongs to a package. + A reference to a file in a files listing from a manifest or data file. """ - path = String( - label='Path of this installed file', - help='The path of this installed file either relative to a rootfs ' - '(typical for system packages) or a path in this scan (typical ' - 'for application packages).', + label='Path of this file.', + help='The file or directory POSIX path. The actual root for this path ' + 'is specific to a datafile format. For instance it is the rootfs ' + 'root for Linux system packages.', repr=True, ) size = Integer( label='file size', - help='size of the file in bytes') + help='size of the file in bytes', + repr=False, + ) sha1 = String( label='SHA1 checksum', - help='SHA1 checksum for this file in hexadecimal') + help='SHA1 checksum for this file in hexadecimal', + repr=False, + ) md5 = String( label='MD5 checksum', - help='MD5 checksum for this file in hexadecimal') + help='MD5 checksum for this file in hexadecimal', + repr=False, + ) sha256 = String( label='SHA256 checksum', - help='SHA256 checksum for this file in hexadecimal') + help='SHA256 checksum for this file in hexadecimal', + repr=False, + ) sha512 = String( label='SHA512 checksum', - help='SHA512 checksum for this file in hexadecimal') + help='SHA512 checksum for this file in hexadecimal', + repr=False, + ) + + extra_data = Mapping( + label='extra data', + help='A mapping of arbitrary extra file reference data.', + ) + + def update(self, other): + """ + Update this reference with an other file reference only for non-empty + values. + """ + for name, value in other.to_dict().items(): + if not value: + continue + current = getattr(self, name, None) + if not current: + setattr(self, name, value) + return self -@attr.s() -class PackageData(BasePackageData): +@attr.attributes(slots=True) +class PackageData(IdentifiablePackageData): """ - A package object as represented by either data from one of its different types of - package data or that of a package instance created from one or more of these - package data, and files for that package. + The data of a given package type. This is the core model to store normalized + package data parsed from package datafiles (such as a manifest) or stored in + a top-level package. """ - # Optional. Public default type for a package class. - default_primary_language = None - primary_language = String( label='Primary programming language', help='Primary programming language',) @@ -503,19 +552,19 @@ class PackageData(BasePackageData): sha1 = String( label='SHA1 checksum', - help='SHA1 checksum for this download in hexadecimal') + help='SHA1 checksum for this package download in hexadecimal') md5 = String( label='MD5 checksum', - help='MD5 checksum for this download in hexadecimal') + help='MD5 checksum for this package download in hexadecimal') sha256 = String( label='SHA256 checksum', - help='SHA256 checksum for this download in hexadecimal') + help='SHA256 checksum for this package download in hexadecimal') sha512 = String( label='SHA512 checksum', - help='SHA512 checksum for this download in hexadecimal') + help='SHA512 checksum for this package download in hexadecimal') bug_tracking_url = String( label='bug tracking URL', @@ -551,108 +600,149 @@ class PackageData(BasePackageData): label='notice text', help='A notice text for this package.') - contains_source_code = TriBoolean( - label='contains source code', - help='Flag set to True if this package contains its own source code, None ' - 'if this is unknown, False if not.') - source_packages = List( - item_type=String, - label='List of related source code packages', + item_type=str, + label='List of related source code package purls', help='A list of related source code Package URLs (aka. "purl") for ' 'this package. For instance an SRPM is the "source package" for a ' - 'binary RPM.') - - installed_files = List( - item_type=PackageFile, - label='installed files', - help='List of files installed by this package.') + 'binary RPM.' + ) + + file_references = List( + item_type=FileReference, + label='referenced files', + help='List of file paths and details for files referenced in a package ' + 'manifest. These may not actually exist on the filesystem. ' + 'The exact semantics and base of these paths is specific to a ' + 'package type or datafile format.' + ) extra_data = Mapping( label='extra data', - help='A mapping of arbitrary extra Package data.') + help='A mapping of arbitrary extra package data.', + ) - def __attrs_post_init__(self, *args, **kwargs): - if not self.type and hasattr(self, 'default_type'): - self.type = self.default_type + dependencies = List( + item_type=DependentPackage, + label='dependencies', + help='A list of DependentPackage for this package.' + ) - if not self.primary_language and hasattr(self, 'default_primary_language'): - self.primary_language = self.default_primary_language + repository_homepage_url = String( + label='package repository homepage URL.', + help='URL to the page for this package in its package repository. ' + 'This is typically different from the package homepage URL proper.' + ) + + repository_download_url = String( + label='package repository download URL.', + help='download URL to download the actual archive of code of this ' + 'package in its package repository. ' + 'This may be different from the actual download URL.' + ) + + api_data_url = String( + label='package repository API URL.', + help='API URL to obtain structured data for this package such as the ' + 'URL to a JSON or XML api its package repository.' + ) + + datasource_id = String( + label='datasource id', + help='Datasource identifier for the source of these package data.', + repr=True, + ) - @classmethod - def get_package_resources(cls, package_root, codebase): - """ - Yield the Resources of a Package starting from `package_root` - """ - if not cls.is_ignored_package_resource(package_root, codebase): - yield package_root - for resource in package_root.walk(codebase, topdown=True, ignored=cls.is_ignored_package_resource): - yield resource + def to_dict(self, with_details=True, **kwargs): + mapping = super().to_dict(with_details=with_details, **kwargs) + if not with_details: + # these are not used in the Package subclass + mapping.pop('file_references', None) + mapping.pop('dependencies', None) + mapping.pop('datasource_id', None) + + return mapping @classmethod - def ignore_resource(cls, resource, codebase): + def from_dict(cls, mapping): """ - Return True if `resource` should be ignored. + Return an instance of PackageData built from a ``mapping`` native Python + data. Known attributes that store a list of objects are also + "rehydrated" (such as models.Party). + + Unknown attributes provided in ``mapping`` that do not exist as fields + in the class are kept as items in the extra_data mapping. An Exception + is raised if an "unknown attribute" name already exists as an extra_data + name. """ - return False + # TODO: consider using a proper library for this such as cattrs, + # marshmallow, etc. or use the field type that we declare. - @staticmethod - def is_ignored_package_resource(resource, codebase): - from packagedcode import PACKAGE_DATA_CLASSES - return any(pt.ignore_resource(resource, codebase) for pt in PACKAGE_DATA_CLASSES) + # Each of these are lists of class instances tracked here, which are stored + # as a list of mappings in scanc_data - def compute_normalized_license(self): - """ - Return a normalized license_expression string using the declared_license - field. Return 'unknown' if there is a declared license but it cannot be - detected and return None if there is no declared license + # these are computed attributes serialized on a package + # that should not be recreated when de-serializing + computed_attributes = set(['purl', ]) - Subclasses can override to handle specifics such as supporting specific - license ids and conventions. - """ - return compute_normalized_license(self.declared_license) + fields_by_name = attr.fields_dict(cls) - @classmethod - def extra_key_files(cls): - """ - Return a list of extra key file paths (or path glob patterns) beyond - standard, well known key files for this Package. List items are strings - that are either paths or glob patterns and are relative to the package - root. + extra_data = mapping.get('extra_data', {}) or {} + package_data = {} - Knowing if a file is a "key-file" file is important for classification - and summarization. For instance, a JAR can have key files that are not - top level under the META-INF directory. Or a .gem archive contains a - metadata.gz file. + list_fields_by_item = { + 'parties': Party, + 'dependencies': DependentPackage, + 'file_references': FileReference, + } - Sub-classes can implement as needed. - """ - return [] + for name, value in mapping.items(): + if not value: + continue - @classmethod - def extra_root_dirs(cls): - """ - Return a list of extra package root-like directory paths (or path glob - patterns) that should be considered to determine if a files is a top - level file or not. List items are strings that are either paths or glob - patterns and are relative to the package root. + if name in computed_attributes: + continue - Knowing if a file is a "top-level" file is important for classification - and summarization. + field = fields_by_name.get(name) + if not field: + # keep unknown fields as extra data + if name not in extra_data: + extra_data[name] = value + continue + else: + raise Exception( + f'Invalid package "scan_data" with duplicated name: {name!r}={value!r} ' + f'present both as attribute AND as extra_data: {name!r}={extra_data[name]!r}' + ) - Sub-classes can implement as needed. - """ - return [] + # re-hydrate lists of typed objects + list_item_type = is_list_field = list_fields_by_item.get(name) - def to_dict(self, _detailed=False, **kwargs): - data = super().to_dict(**kwargs) - if _detailed: - data['installed_files'] = [ - istf.to_dict() for istf in (self.installed_files or []) - ] - else: - data.pop('installed_files', None) - return data + if is_list_field: + items = list(_rehydrate_list(cls=list_item_type, values=value)) + package_data[name] = items + else: + # this is a plain, non-nested field + package_data[name] = value + + return super().from_dict(package_data) + + +def _rehydrate_list(cls, values): + """ + Yield ``cls`` objects built from a ``values`` list of mappings. + """ + # Since we have a list_item_type, value must be a list of mappings: + # we transform it in a list of objects. + base_msg = 'Invalid package "scan_data "with unknown data structure.' + if not isinstance(values, list) and not all(isinstance(v, dict) for v in values): + raise Exception( + f'{base_msg}. Expected the value to be a list of dicts and not: ' + f'{type(values)!r} for class: {cls!r}' + ) + + for val in values: + yield cls.from_dict(val) def compute_normalized_license(declared_license, expression_symbols=None): @@ -664,6 +754,9 @@ def compute_normalized_license(declared_license, expression_symbols=None): Use the ``expression_symbols`` mapping of {lowered key: LicenseSymbol} if provided. Otherwise use the standard SPDX license symbols. """ + # Ensure declared license is always a string + if not isinstance(declared_license, str): + declared_license = repr(declared_license) if not declared_license: return @@ -674,603 +767,568 @@ def compute_normalized_license(declared_license, expression_symbols=None): query_string=declared_license, expression_symbols=expression_symbols ) - except Exception: - # FIXME: add logging + except Exception as e: # we never fail just for this + if TRACE: + logger_debug(f'Failed to compute license for {declared_license!r}: {e!r}') + # FIXME: add logging return 'unknown' -@attr.s -class PackageDataFile: +class DatafileHandler: """ - A mixin for package manifests, lockfiles and other package data files - that can be recognized. + A base handler class to handle any package manifests, lockfiles and data + files. Each subclass handles a package datafile format to parse datafiles + and assemble Package and Depdencies from these: + + - parses a datafile format and yields package data. - When creating a new package data, a class should be created that extends - both PackageDataFile and PackageData. + - assembles this datafile package data in top-level packages and dependencies + - assigns package files to their package """ - dependencies = List( - item_type=DependentPackage, - label='dependencies', - help='A list of DependentPackage for this package. ') + # A string to uniquely identify the datasource of this parser. Every parser + # must fill this with a unique and descriptive string if (unique ignoring + # case). Must be a valid Python identifier: must start with an ASCII letter, + # can only contain ASCII letters, digits and underscore. Must be lowercase + datasource_id = None + + # Sequence of known fnmatch-style case-insensitive glob patterns (e.g., Unix + # shell style patterns) that apply on the whole POSIX path for package + # datafiles recognized and parsed by this parser. See fnmatch.fnmatch(). + # * matches everything + # ? matches any single character + # Used by the default is_datafile() method. If not using this, a subclass + # must override is_datafile() + path_patterns = tuple() + + # Sequence of file types fragments: one of these must be contained in the + # resource filetype + filetypes = tuple() + # Informational: Default package type for this parser. Some parsers may + # yield more than one package type + default_package_type = None - # class-level attributes used to recognize a package - filetypes = tuple() - mimetypes = tuple() - extensions = tuple() + # Informational: Default primary language for this parser. + default_primary_language = None - # list of known file_patterns for a package manifest type - file_patterns = tuple() + # Informational: Description of this parser + description = None - @property - def package_data_type(self): + # Informational: URL that documents this file format + documentation_url = None + + @classmethod + def is_datafile(cls, location, filetypes=tuple(), _bare_filename=False): """ - A tuple unique across package data, created from the default package type - and the manifest type. + Return True if the file at ``location`` is likely a package data file + that this parser can handle. This implementation is based on: + + - matching the ``location`` as a whole with any one of the + ``path_patterns`` sequence of patterns defined as a class attributes. + The path patterns are for POSIX paths. + + - if defined, ensuring that the filetype of the file at ``location`` + contains any of the type listed in the ``filetypes`` class attribute. + + - ``_bare_filename`` is for testing using a bare path that does not + point to real files. + Subclasses can override to implement more complex data file recognition. """ - return self.default_type, self.manifest_type() + if filetype.is_file(location) or _bare_filename: + loc = as_posixpath(location) + if any(fnmatchcase(loc, pat) for pat in cls.path_patterns): + filetypes = filetypes or cls.filetypes + if not filetypes: + return True + else: + T = contenttype.get_type(location) + actual_type = T.filetype_file.lower() + return any(ft in actual_type for ft in filetypes) @classmethod - def manifest_type(cls): - return f"{cls.__module__}.{cls.__qualname__}" + def parse(cls, location): + """ + Yield one or more PackageData objects given a package data file at + ``location``. - @classmethod - def is_package_data_file(cls, location): + Subclasses must implement and are responsible for returning proper + computed license fields and list of resources and files. """ - Return True if the file at ``location`` is likely a manifest/lockfile/other - package data file of this type. + raise NotImplementedError - Sub-classes should override to implement their own package data file recognition. + @classmethod + def assemble(cls, package_data, resource, codebase): """ - if not filetype.is_file(location): - return + Given a ``package_data`` PackageData found in the ``resource`` datafile + of the ``codebase``, assemble package their files and dependencies + from one or more datafiles. - filename = file_name(location) + Update ``codebase`` Resources with the package they are for. - file_patterns = cls.file_patterns - if any(fnmatch.fnmatchcase(filename, metaf) for metaf in file_patterns): - return True + Yield items that can be of these types: - T = contenttype.get_type(location) - ftype = T.filetype_file.lower() - mtype = T.mimetype_file + - a Package to add to top-level packages with its list of Files. + - Resources that have been handled --such as this datafiles-- that should + not be further processed, + - a Dependency to add to top-level dependencies - _base_name, extension = splitext_name(location, is_file=True) - extension = extension.lower() + The approach is to find and process all the neighboring related datafiles + to this datafile at once. - if TRACE: - logger_debug( - 'is_manifest: ftype:', ftype, 'mtype:', mtype, - 'pygtype:', T.filetype_pygment, - 'fname:', filename, 'ext:', extension, + The default implementation handles this datafile only: + + - It does not include other related datafiles and manifests. + - It considers only this datafile as a package file + - It returns only this datafile resource as having been processed + + Subclasses should override to implement more complex cases where + multiple datafiles are combined and some files can be ignored. + """ + datafile_path = resource.path + # do we have enough to create a package? + if package_data.purl: + package = Package.from_package_data( + package_data=package_data, + datafile_path=datafile_path, ) + package_uid = package.package_uid - type_matched = False - if cls.filetypes: - type_matched = any(t in ftype for t in cls.filetypes) - - mime_matched = False - if cls.mimetypes: - mime_matched = any(m in mtype for m in cls.mimetypes) - - extension_matched = False - extensions = cls.extensions - if extensions: - extensions = (e.lower() for e in extensions) - extension_matched = any( - fnmatch.fnmatchcase(extension, ext_pat) - for ext_pat in extensions + if not package.license_expression: + package.license_expression = cls.compute_normalized_license(package) + + cls.assign_package_to_resources( + package=package, + resource=resource, + codebase=codebase, ) - if type_matched and mime_matched and extension_matched: - return True + yield package + else: + # we have no package, so deps are not for a specific package uid + package_uid = None + + # in all cases yield possible dependencies + dependent_packages = package_data.dependencies + if dependent_packages: + yield from Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=datafile_path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) + # we yield this as we do not want this further processed + yield resource @classmethod - def recognize(cls, location): + def compute_normalized_license(cls, package): """ - Yield one or more PackageData objects given a file at `location` - pointing to a package archive, manifest, lockfile or other package data. + Return a computed license expression string or None given a ``package`` + Package object. - Sub-classes should override to implement their own package recognition and creation. - - This should be called on the file at `location` only if `is_manifest` function - of the same class returns True. + Called only when using the default assemble() implementation. + Subclass can override as needed. """ - raise NotImplementedError - + if package.declared_license and not package.license_expression: + try: + license_expression = compute_normalized_license(package.declared_license) + except Exception: + if SCANCODE_DEBUG_PACKAGE_API: + raise + license_expression = 'unknown' -@attr.s() -class Package: - """ - A package mixin as represented by its package data, files and data - from its package data. Here package obviously represents a package - instance. + if TRACE: + logger_debug(f' compute_normalized_license: license_expression: {license_expression}') - Subclasses must extend a Package subclass for a given ecosystem. - """ + return license_expression - package_uuid = String( - label='Package instance UUID', - help='A unique ID for package instances in a codebase scan.' - 'Consists of a pURL and an UUID field as a pURL qualifier.' - ) + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + """ + Set the "for_packages" attributes to ``package`` given a + starting ``resource`` in the ``codebase``. - package_data_files = List( - item_type=String, - label='Package data paths', - help='List of package data file paths for this package' - ) + This default implementation assigns the package to the whole + ``resource`` tree. Since ``resource`` is a file y default, this means + that only the datafile ``resource`` is assigned to the ``package`` by + default. - files = List( - item_type=PackageFile, - label='Provided files', - help='List of files provided by this package.' - ) + Called only when using the default assemble() implementation. + Subclass can override as needed to assign a package to its files. + """ + # NOTE: we do not attach files to the Package level. Instead we + # update `for_packages` of a codebase resource. + package_uid = package.package_uid + if resource: + resource.for_packages.append(package_uid) + resource.save(codebase) + for res in resource.walk(codebase): + res.for_packages.append(package_uid) + res.save(codebase) - @property - def ignore_paths(self): + @classmethod + def assign_package_to_parent_tree(cls, package, resource, codebase): """ - Paths to ignore when looking for other package_data files. + Set the "for_packages" attributes to ``package`` for the whole + resource tree of the parent of a ``resource`` object in the + ``codebase``. If codebase doesn't have a parent, just set the + attribute for that resource only. - Override the default empty list by defining for each package ecosystems specifically. + This is a convenience method that subclasses can reuse when overriding + `assign_package_to_resources()` """ - return [] + if resource.has_parent(): + parent = resource.parent(codebase) + cls.assign_package_to_resources(package, parent, codebase) + else: + cls.assign_package_to_resources(package, resource, codebase) - def get_package_data(self): + @classmethod + def assemble_from_many(cls, pkgdata_resources, codebase,): """ - Returns a mapping of package data attributes and corresponding values. + Yield Package, Resources or Dependency given a ``pkgdata_resources`` + list of tuple (PackageData, Resource) in ``codebase``. + + Create a Package from the first package_data item. Update this package + with other items. Assign to this Package the file tree from the parent + of the first resource item. + + Because of this, set the order of ``pkgdata_resources`` items carefully. + + This is a convenience method that subclasses can reuse when overriding + `assemble()` + + NOTE: ATTENTION!: this may not work well for datafile that yield + multiple PackageData for unrelated Packages """ - mapping = self.to_dict() + package = None + package_uid = None + base_resource = None + + # process each package in sequence. The first item creates a package and + # the other only update + for package_data, resource in pkgdata_resources: + if not base_resource: + base_resource = resource + + if not package: + # create package from the first item first package_data + if package_data.purl: + package = Package.from_package_data( + package_data=package_data, + datafile_path=resource.path, + ) + package_uid = package.package_uid + resource.for_packages.append(package_uid) + resource.save(codebase) + else: + # FIXME: What is the package_data is NOT for the same package as package? + # FIXME: What if the update did not do anything? (it does return True or False) + # FIXME: There we would be missing out packges AND/OR errors + package.update( + package_data=package_data, + datafile_path=resource.path, + ) + resource.for_packages.append(package_uid) + resource.save(codebase) + + # in all cases yield possible dependencies + dependent_packages = package_data.dependencies + if dependent_packages: + yield from Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=resource.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) - # Removes Package specific attributes - for attribute in ('package_uuid', 'package_data_files', 'files'): - mapping.pop(attribute, None) + # we yield this as we do not want this further processed + yield resource - # Remove attributes which are BasePackageData functions - for attribute in ('repository_homepage_url', 'repository_download_url', 'api_data_url'): - mapping.pop(attribute, None) + # the whole parent subtree of the base_resource is for this package + for res in base_resource.walk(codebase): + res.for_packages.append(package_uid) + res.save(codebase) - return mapping + if package: + if not package.license_expression: + package.license_expression = cls.compute_normalized_license(package) + yield package - def populate_package_data(self, package_data_by_path, uuid): + @classmethod + def assemble_from_many_datafiles(cls, datafile_name_patterns, directory, codebase): """ - Create a package instance object from one or multiple package data. + Assemble Package and Dependency from package data of the datafiles found + in multiple ``datafile_name_patterns`` name patterns (case- sensitive) + found in the ``directory`` Resource. + + Create a Package from the first package data item. Update this package + with other items. Assign to this Package the file tree from the parent + of the first resource item. + + Because of this, set the order of ``datafile_name_patterns`` items carefully. + + This is a convenience method that subclasses can reuse when overriding + `assemble()` + + NOTE: ATTENTION!: this will not work well for datafile that yields + multiple PackageData for unrelated Packages. """ - paths_with_mismatch = [] + if TRACE: + logger_debug(f'assemble_from_many_datafiles: datafile_name_patterns: {datafile_name_patterns!r}') - for path, package_data in package_data_by_path.items(): - success = True - if TRACE: - logger.debug('Merging package manifest data for: {}'.format(path)) - logger.debug('package manifest data: {}'.format(repr(package_data))) - - success = self.update(package_data.copy()) - if not success: - paths_with_mismatch.append(path) - - if TRACE: - logger.debug('Failed to merge package manifest data for: {}'.format(path)) - continue + if not codebase.has_single_resource: + siblings = list(directory.children(codebase)) + else: + siblings = [directory] - self.package_data_files.append(path) - - for path in paths_with_mismatch: - package_data_by_path.pop(path) + pkgdata_resources = [] - self.package_data_files = tuple(self.package_data_files) + # we iterate on datafile_name_patterns because their order matters + for datafile_name_pattern in datafile_name_patterns: + for sibling in siblings: + if fnmatchcase(sibling.name, datafile_name_pattern): + for package_data in sibling.package_data: + package_data = PackageData.from_dict(package_data) + pkgdata_resources.append((package_data, sibling,)) - # Set `package_uuid` as pURL for the package + it's uuid as a qualifier - # in the pURL string - try: - purl_with_uuid = PackageURL.from_string(self.purl) - except ValueError: + if pkgdata_resources: if TRACE: - logger.debug("Couldn't create purl for: {}".format(path)) - return + logger_debug(f' assemble_from_many_datafiles: pkgdata_resources: {pkgdata_resources!r}') - purl_with_uuid.qualifiers["uuid"] = str(uuid) - self.package_uuid = purl_with_uuid.to_string() + yield from cls.assemble_from_many( + pkgdata_resources=pkgdata_resources, + codebase=codebase, + ) - def get_package_files(self, resource, codebase): + @classmethod + def create_default_package_data(cls, **kwargs): """ - Return a list of all the file paths for a package instance. - - Sub-classes should override to implement their own package files finding methods. + Return an empty PackageData using default values and the provided kwargs. """ - files = [] + return PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + **kwargs, + ) - if codebase.has_single_resource: - files.append(resource.path) - return files - parent = resource.parent(codebase) +class NonAssemblableDatafileHandler(DatafileHandler): + """ + A handler that has no default implmentation for the assemble method, e.g., + it will not alone trigger the creation of a top-level Pacakge. + """ - for resource in parent.walk(codebase): - if resource.is_dir: - continue + @classmethod + def assemble(cls, package_data, resource, codebase): + return [] - files.append(resource.path) - - return files - def get_other_package_data(self, resource, codebase): - """ - Return a dictionary of other package data by their paths for a given package instance. +def build_package_uid(purl): + """ + Return a purl string with a UUID qualifier given a ``purl`` string . + """ + purl = PackageURL.from_string(purl) + purl.qualifiers['uuid'] = str(uuid.uuid4()) + return str(purl) - Sub-classes can override to implement their own package manifest finding methods. - """ - package_data_by_path = {} - if codebase.has_single_resource: - return package_data_by_path +def build_purl(mapping): + """ + Return a PackageURL from a ``mapping`` or None if essential type and name + fields are missing. + """ + ptype = mapping.get('type') + name = mapping.get('name') + if not ptype or not name: + return - parent = resource.parent(codebase) + namespace = mapping.get('namespace') + version = mapping.get('version') + qualifiers = mapping.get('qualifiers') or {} + subpath = mapping.get('subpath') + return PackageURL( + type=ptype, + name=name, + namespace=namespace, + version=version, + qualifiers=qualifiers, + subpath=subpath, + ) - paths_to_ignore = self.ignore_paths - for resource in parent.walk(codebase): - if resource.is_dir: - continue +@attr.attributes(slots=True) +class Package(PackageData): + """ + Top-level package instance assembled from parsed package data collected + from one or more data files such as manifests or lockfiles. + """ - if paths_to_ignore: - if any( - path in resource.path - for path in paths_to_ignore - ): - continue + package_uid = String( + label='Package unique id', + help='A unique identifier for this package instance.' + 'Consists of the package purl with a UUID qualifier.' + ) + + datafile_paths = List( + item_type=str, + label='List of datafile paths', + help='List of datafile paths used to create this package.' + ) + + datasource_ids = List( + item_type=str, + label='datasource ids', + help='List of the datasource ids used to create this package.' + ) + + def __attrs_post_init__(self, *args, **kwargs): + if not self.package_uid: + self.package_uid = build_package_uid(self.purl) - filename = file_name(resource.location) - file_patterns = self.get_file_patterns(manifests=self.manifests) - if any(fnmatch.fnmatchcase(filename, pattern) for pattern in file_patterns): - if not resource.package_data: - continue # Raise Exception(?) + def to_dict(self): + return super().to_dict(with_details=False) - #ToDo: Implement for multiple package data per path - package_data_by_path[resource.path] = resource.package_data[0] + @classmethod + def from_package_data(cls, package_data, datafile_path): + """ + Return a Package from a ``package_data`` PackageData object + or mapping. Or None. + """ + if isinstance(package_data, PackageData): + package_data_mapping = package_data.to_dict() + dsid = package_data.datasource_id + elif isinstance(package_data, dict): + # make a copy + package_data_mapping = dict(package_data.items()) + dsid = package_data['datasource_id'] + elif package_data: + raise Exception(f'Invalid type: {package_data!r}', package_data) + + package_data_mapping['datafile_paths'] = [datafile_path] + package_data_mapping['datasource_ids'] = [dsid] + + return cls.from_dict(package_data_mapping) - return package_data_by_path - - def get_file_patterns(self, manifests): + @classmethod + def from_dict(cls, mapping): """ - Return a list of all `file_patterns` for all the PackageData classes - in `manifests`. + Return an instance of Package built from a ``mapping`` of native Python + data, typically a PackageData-like ``mapping``. Return None if there are + not enough data to form a PackageURL from this data. + + See PackageData.from_dict() for other details. """ - manifest_file_patterns = [] - for manifest in manifests: - manifest_file_patterns.extend(manifest.file_patterns) - - return manifest_file_patterns + if build_purl(mapping): + return super().from_dict(mapping) - def update(self, package_data, replace=False): + def is_compatible(self, package_data, include_qualifiers=True): """ - Returns False if there's a type/name/version mismatch between the package - and the package_data, otherwise returns True if update is successful. - - Update the Package object with data from the `package_data` - object. - When an `package_instance` field has no value one side and and the - `package_data` field has a value, the `package_instance` field is always - set to this value. - If `replace` is True and a field has a value on both sides, then - package_instance field value will be replaced by the package_data - field value. Otherwise if `replace` is False, the package_instance - field value is left unchanged in this case. + Return True if the ``package_data`` PackageData is compatible with + this Package, e.g. it is about the same package. """ - existing_mapping = self.get_package_data() - - # Remove PackageData specific attributes - for attribute in ['root_path']: - package_data.pop(attribute, None) - existing_mapping.pop(attribute, None) - - for existing_field, existing_value in existing_mapping.items(): - new_value = package_data[existing_field] - if TRACE_MERGING: - logger.debug( - '\n'.join([ - 'existing_field:', repr(existing_field), - ' existing_value:', repr(existing_value), - ' new_value:', repr(new_value)]) - ) + return ( + self.type == package_data.type + and self.namespace == package_data.namespace + and self.name == package_data.name + and self.version == package_data.version + and (include_qualifiers and self.qualifiers == package_data.qualifiers) + and self.subpath == package_data.subpath + and self.primary_language == package_data.primary_language + ) - # FIXME: handle Booleans??? - - # These fields has to be same across the package_data - if existing_field in ('name', 'version', 'type', 'primary_language'): - if existing_value and new_value and existing_value != new_value: - if TRACE_MERGING: - logger.debug( - '\n'.join([ - 'Mismatched {}:'.format(existing_field), - ' existing_value: {}'.format(existing_value), - ' new_value: {}'.format(new_value) - ]) - ) - return False + def update(self, package_data, datafile_path, replace=False): + """ + Update this Package with data from the ``package_data`` PackageData. + + If a field does not have a value and the ``package_data`` field has a + value, set this package field to the ``package_data`` field value. + + If there is a value on both side, update the value according to the + ``replace`` flag. + + If ``replace`` is True, replace a value with the ``package_data`` value. + Otherwise existing, non-empty values are left unchanged. + + List of values are merged, keeping the original order and avoiding duplicates. + + Return True if update is successful. + + Return False if there is a type, name or version mismatch between this + package and the provided ``package_data`` + """ + if not package_data: + return + + if not self.is_compatible(package_data, include_qualifiers=False): + if TRACE_UPDATE: + logger_debug(f'update: {self.purl} not compatible with: {package_data.purl}') + return False + + # always append these new items + self.datasource_ids.append(package_data.datasource_id) + self.datafile_paths.append(datafile_path) + + existing = self.to_package_data().to_dict() + new_package_data = package_data.to_dict() + + # update for these means combining lists of items from both sides + list_fields = set([ + 'parties', + 'dependencies', + 'file_references', + ]) + + for name, value in existing.items(): + new_value = new_package_data.get(name) + + if TRACE_UPDATE: + logger_debug(f'update: {name!r}={value!r} with new_value: {new_value!r}') if not new_value: - if TRACE_MERGING: - logger.debug(' No new value for {}: skipping'.format(existing_field)) + if TRACE_UPDATE: logger_debug(' No new value: skipping') + continue + + if not value: + if TRACE_UPDATE: logger_debug(' set existing value to new') + setattr(self, name, new_value) + continue + + if replace: + if TRACE_UPDATE: logger_debug(' replace existing value to new') + setattr(self, name, new_value) continue - if not existing_value or replace: - if TRACE_MERGING and not existing_value: - logger.debug( - ' No existing value: set to new: {}'.format(new_value)) - - if TRACE_MERGING and replace: - logger.debug( - ' Existing value and replace: set to new: {}'.format(new_value)) - - if existing_field == 'parties': - # If `existing_field` is `parties`, then we update the `Party` table - parties = new_value - parties_new = [] - - for party in parties: - party_new = Party( - type=party['type'], - role=party['role'], - name=party['name'], - email=party['email'], - url=party['url'], - ) - parties_new.append(party_new) - - if replace: - setattr(self, existing_field, parties_new) - else: - existing_value.extend(parties_new) - setattr(self, existing_field, existing_value) - - elif existing_field == 'dependencies': - # If `existing_field` is `dependencies`, then we update the `DependentPackage` table - dependencies = new_value - deps_new = [] - - for dependency in dependencies: - dep_new = DependentPackage( - purl=dependency['purl'], - extracted_requirement=dependency['requirement'], - scope=dependency['scope'], - is_runtime=dependency['is_runtime'], - is_optional=dependency['is_optional'], - is_resolved=dependency['is_resolved'], - ) - deps_new.append(dep_new) - - if replace: - setattr(self, existing_field, deps_new) - else: - existing_value.extend(deps_new) - setattr(self, existing_field, existing_value) - - if TRACE_MERGING: - logger.debug("Set value to self: {} at {}".format(new_value, existing_field)) - logger.debug("Set value to self: types: {} at {}".format(type(new_value), type(existing_field))) - - elif existing_field == 'purl': - self.set_purl(package_url=new_value) + # here we do not replace... but we still merge lists/mappings + if name == 'extra_data': + value.update(new_value) + + if name in list_fields: + if TRACE_UPDATE: logger_debug(' merge lists of values') + merged = merge_sequences(list1=value, list2=new_value) + setattr(self, name, merged) + + elif TRACE_UPDATE and value != new_value: + if TRACE_UPDATE: logger_debug(' skipping update: no replace') - else: - # If `existing_field` is not `parties` or `dependencies`, then the - # `existing_field` is a regular field on the Package model and can - # be updated normally. - if TRACE_MERGING: - logger.debug("Set value to self: {} at {}".format(new_value, existing_field)) - logger.debug("Set value to self: types: {} at {}".format(type(new_value), type(existing_field))) - setattr(self, existing_field, new_value) - - if existing_value and new_value and existing_value != new_value: - # ToDo: What to do when conflicting values are present - # license_expression: do AND? - if TRACE_MERGING: - logger.debug("Value mismatch between new and existing: ") - logger.debug( - '\n'.join([ - 'existing_field:', repr(existing_field), - ' existing_value:', repr(existing_value), - ' new_value:', repr(new_value)]) - ) - - if TRACE_MERGING: - logger.debug(' Nothing done') - - # Return True if package data update is successful return True -# Package types -# NOTE: this is somewhat redundant with extractcode archive handlers -# yet the purpose and semantics are rather different here - - -@attr.s() -class JavaJar(PackageData, PackageDataFile): - file_patterns = ('META-INF/MANIFEST.MF',) - extensions = ('.jar',) - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip',) - default_type = 'jar' - default_primary_language = 'Java' - - -@attr.s() -class JavaWar(PackageData, PackageDataFile): - file_patterns = ('WEB-INF/web.xml',) - extensions = ('.war',) - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip') - default_type = 'war' - default_primary_language = 'Java' - - -@attr.s() -class JavaEar(PackageData, PackageDataFile): - file_patterns = ('META-INF/application.xml', 'META-INF/ejb-jar.xml') - extensions = ('.ear',) - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip') - default_type = 'ear' - default_primary_language = 'Java' - - -@attr.s() -class Axis2Mar(PackageData, PackageDataFile): - """Apache Axis2 module""" - file_patterns = ('META-INF/module.xml',) - extensions = ('.mar',) - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip') - default_type = 'axis2' - default_primary_language = 'Java' - - -@attr.s() -class JBossSar(PackageData, PackageDataFile): - file_patterns = ('META-INF/jboss-service.xml',) - extensions = ('.sar',) - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip') - default_type = 'jboss' - default_primary_language = 'Java' - - -@attr.s() -class MeteorPackage(PackageData, PackageDataFile): - file_patterns = ('package.js',) - default_type = 'meteor' - default_primary_language = 'JavaScript' - - -@attr.s() -class CpanModule(PackageData, PackageDataFile): - file_patterns = ( - '*.pod', - # TODO: .pm is not a package manifest - '*.pm', - 'MANIFEST', - 'Makefile.PL', - 'META.yml', - 'META.json', - '*.meta', - 'dist.ini',) - # TODO: refine me - extensions = ('.tar.gz',) - default_type = 'cpan' - default_primary_language = 'Perl' - - -# TODO: refine me: Go packages are a mess but something is emerging -# TODO: move to and use godeps.py -@attr.s() -class Godep(PackageData, PackageDataFile): - file_patterns = ('Godeps',) - default_type = 'golang' - default_primary_language = 'Go' - - -@attr.s() -class AndroidApp(PackageData, PackageDataFile): - filetypes = ('zip archive',) - mimetypes = ('application/zip',) - extensions = ('.apk',) - default_type = 'android' - default_primary_language = 'Java' - - -# see http://tools.android.com/tech-docs/new-build-system/aar-formats -@attr.s() -class AndroidLibrary(PackageData, PackageDataFile): - filetypes = ('zip archive',) - mimetypes = ('application/zip',) - # note: Apache Axis also uses AAR extensions for plain Jars. - # this could be decided based on internal structure - extensions = ('.aar',) - default_type = 'android-lib' - default_primary_language = 'Java' - - -@attr.s() -class MozillaExtension(PackageData, PackageDataFile): - filetypes = ('zip archive',) - mimetypes = ('application/zip',) - extensions = ('.xpi',) - default_type = 'mozilla' - default_primary_language = 'JavaScript' - - -@attr.s() -class ChromeExtension(PackageData, PackageDataFile): - filetypes = ('data',) - mimetypes = ('application/octet-stream',) - extensions = ('.crx',) - default_type = 'chrome' - default_primary_language = 'JavaScript' - - -@attr.s() -class IOSApp(PackageData, PackageDataFile): - filetypes = ('zip archive',) - mimetypes = ('application/zip',) - extensions = ('.ipa',) - default_type = 'ios' - default_primary_language = 'Objective-C' - - -@attr.s() -class CabPackage(PackageData, PackageDataFile): - filetypes = ('microsoft cabinet',) - mimetypes = ('application/vnd.ms-cab-compressed',) - extensions = ('.cab',) - default_type = 'cab' - - -@attr.s() -class InstallShieldPackage(PackageData, PackageDataFile): - filetypes = ('installshield',) - mimetypes = ('application/x-dosexec',) - extensions = ('.exe',) - default_type = 'installshield' - - -@attr.s() -class NSISInstallerPackage(PackageData, PackageDataFile): - filetypes = ('nullsoft installer',) - mimetypes = ('application/x-dosexec',) - extensions = ('.exe',) - default_type = 'nsis' - - -@attr.s() -class SharPackage(PackageData, PackageDataFile): - filetypes = ('posix shell script',) - mimetypes = ('text/x-shellscript',) - extensions = ('.sha', '.shar', '.bin',) - default_type = 'shar' - - -@attr.s() -class AppleDmgPackage(PackageData, PackageDataFile): - filetypes = ('zlib compressed',) - mimetypes = ('application/zlib',) - extensions = ('.dmg', '.sparseimage',) - default_type = 'dmg' - - -@attr.s() -class IsoImagePackage(PackageData, PackageDataFile): - filetypes = ('iso 9660 cd-rom', 'high sierra cd-rom',) - mimetypes = ('application/x-iso9660-image',) - extensions = ('.iso', '.udf', '.img',) - default_type = 'iso' - - -@attr.s() -class SquashfsPackage(PackageData, PackageDataFile): - filetypes = ('squashfs',) - default_type = 'squashfs' - -# TODO: Add VM images formats(VMDK, OVA, OVF, VDI, etc) and Docker/other containers +def merge_sequences(list1, list2, **kwargs): + """ + Return a new list of model objects merging the lists ``list1`` and + ``list2`` keeping the original ``list1`` order and discarding + duplicates. + """ + list1 = list1 or [] + list2 = list2 or [] + merged = [] + existing = set() + for item in list1 + list2: + key = item.to_tuple(**kwargs) + if not key in existing: + merged.append(item) + existing.add(key) + return merged diff --git a/tests/formattedcode/data/csv/flatten_scan/full.json b/tests/formattedcode/data/csv/flatten_scan/full.json index b047625795d..778da14a7c8 100644 --- a/tests/formattedcode/data/csv/flatten_scan/full.json +++ b/tests/formattedcode/data/csv/flatten_scan/full.json @@ -192,7 +192,6 @@ "declared_licensing": null, "notice_text": null, "dependencies": [], - "contains_source_code": null, "source_packages": [] } ], @@ -1688,7 +1687,6 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [] } ], diff --git a/tests/formattedcode/data/csv/flatten_scan/full.json-expected b/tests/formattedcode/data/csv/flatten_scan/full.json-expected index cea36e13e51..4af3c497547 100644 --- a/tests/formattedcode/data/csv/flatten_scan/full.json-expected +++ b/tests/formattedcode/data/csv/flatten_scan/full.json-expected @@ -149,8 +149,7 @@ "package__code_view_url": "", "package__copyright": "", "package__license_expression": "", - "package__notice_text": "", - "package__contains_source_code": "" + "package__notice_text": "" }, { "path": "samples/JGroups/", @@ -1385,8 +1384,7 @@ "package__code_view_url": "", "package__copyright": "", "package__license_expression": "", - "package__notice_text": "", - "package__contains_source_code": "" + "package__notice_text": "" }, { "path": "samples/srp/scan/json2csv.rb", diff --git a/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json b/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json index 451a657df01..70775395cdd 100644 --- a/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json +++ b/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json @@ -75,7 +75,6 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [] } ], diff --git a/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json-expected b/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json-expected index 7f47a68cd06..8cd250ee60e 100644 --- a/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json-expected +++ b/tests/formattedcode/data/csv/flatten_scan/package_license_value_null.json-expected @@ -41,7 +41,6 @@ "package__code_view_url": "", "package__copyright": "", "package__license_expression": "", - "package__notice_text": "", - "package__contains_source_code": "" + "package__notice_text": "" } ] \ No newline at end of file diff --git a/tests/formattedcode/data/csv/livescan/expected.csv b/tests/formattedcode/data/csv/livescan/expected.csv index f01f4ca32a2..e30bebe1b0f 100644 --- a/tests/formattedcode/data/csv/livescan/expected.csv +++ b/tests/formattedcode/data/csv/livescan/expected.csv @@ -1,23 +1,23 @@ -path,type,name,base_name,extension,size,date,sha1,md5,sha256,mime_type,file_type,programming_language,is_binary,is_text,is_archive,is_media,is_source,is_script,percentage_of_license_text,files_count,dirs_count,size_count,scan_errors,license_expression,license__key,license__score,license__name,license__short_name,license__category,license__is_exception,license__is_unknown,license__owner,license__homepage_url,license__text_url,license__reference_url,license__scancode_text_url,license__scancode_data_url,license__spdx_license_key,license__spdx_url,start_line,end_line,matched_rule__identifier,matched_rule__license_expression,matched_rule__licenses,matched_rule__referenced_filenames,matched_rule__is_license_text,matched_rule__is_license_notice,matched_rule__is_license_reference,matched_rule__is_license_tag,matched_rule__is_license_intro,matched_rule__has_unknown,matched_rule__matcher,matched_rule__rule_length,matched_rule__matched_length,matched_rule__match_coverage,matched_rule__rule_relevance,copyright,holder,email,url,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__contains_source_code,package__extra_data,package__purl -json2csv.rb,file,json2csv.rb,json2csv,.rb,912,2022-02-15,1236469a06a2bacbdd8e172ad718482af5b0a936,1307c281e0b153202e291b217eab85d5,12ba215313981dbe810d9ed696b7cc753d97adfcc26eba1e13f941dc7506aa4e,text/x-script.python,"Python script, ASCII text executable",Ruby,False,True,False,False,True,True,62.04,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,apache-2.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,apache-2.0,100.00,Apache License 2.0,Apache 2.0,Permissive,False,False,Apache Software Foundation,http://www.apache.org/licenses/,http://www.apache.org/licenses/LICENSE-2.0,https://scancode-licensedb.aboutcode.org/apache-2.0,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml,Apache-2.0,https://spdx.org/licenses/Apache-2.0,5,13,apache-2.0_7.RULE,apache-2.0,apache-2.0,,,True,,,,,2-aho,85,85,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,3,,,,,,,,,,,,,,,,Copyright (c) 2017 nexB Inc. and others,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,3,,,,,,,,,,,,,,,,,nexB Inc. and others,,,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4,,,,,,,,,,,,,,,,,,,http://nexb.com/,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4,,,,,,,,,,,,,,,,,,,https://github.com/nexB/scancode-toolkit/,,,,,,,,,,,,,,,,,,,,,,,,,, -json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,8,,,,,,,,,,,,,,,,,,,http://www.apache.org/licenses/LICENSE-2.0,,,,,,,,,,,,,,,,,,,,,,,,,, -license,file,license,license,,679,2022-02-15,75c5490a718ddd45e40e0cc7ce0c756abc373123,b965a762efb9421cf1bf4405f336e278,a34098a43e5677495f59dff825a3f9bc0f2b0261d75feb2356919f4c3ce049ab,text/plain,ASCII text,,False,True,False,False,False,False,100.0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -license,,,,,,,,,,,,,,,,,,,,,,,,gpl-2.0-plus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -license,,,,,,,,,,,,,,,,,,,,,,,,,gpl-2.0-plus,100.00,GNU General Public License 2.0 or later,GPL 2.0 or later,Copyleft,False,False,Free Software Foundation (FSF),http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html,http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html,https://scancode-licensedb.aboutcode.org/gpl-2.0-plus,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml,GPL-2.0-or-later,https://spdx.org/licenses/GPL-2.0-or-later,1,12,gpl-2.0-plus_420.RULE,gpl-2.0-plus,gpl-2.0-plus,,,True,,,,,1-hash,113,113,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,file,package.json,package,.json,2200,2022-02-15,918376afce796ef90eeda1d6695f2289c90491ac,1f66239a9b850c5e60a9382dbe2162d2,29f6068a1b6c7d06f115a5edc4ed8558edde42c6bbf0145ed77cf1108a0dd529,application/json,JSON data,,False,True,False,False,False,False,58.1,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,mit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,mit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,mit,100.00,MIT License,MIT License,Permissive,False,False,MIT,http://opensource.org/licenses/mit-license.php,http://opensource.org/licenses/mit-license.php,https://scancode-licensedb.aboutcode.org/mit,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml,MIT,https://spdx.org/licenses/MIT,24,24,mit_649.RULE,mit,mit,,,True,,,,,2-aho,4,4,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,mit,100.00,MIT License,MIT License,Permissive,False,False,MIT,http://opensource.org/licenses/mit-license.php,http://opensource.org/licenses/mit-license.php,https://scancode-licensedb.aboutcode.org/mit,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml,MIT,https://spdx.org/licenses/MIT,24,24,mit.LICENSE,mit,mit,,True,,,,,,2-aho,161,161,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,24,,,,,,,,,,,,,,,,Copyright (c) 2012 LearnBoost ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,24,,,,,,,,,,,,,,,,,LearnBoost,,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,12,,,,,,,,,,,,,,,,,,tj@learnboost.com,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,https://github.com/visionmedia/node-cookie-signature.git,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,27,,,,,,,,,,,,,,,,,,,https://github.com/visionmedia/node-cookie-signature/issues,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,npm,,cookie-signature,v 1.0.3,,,JavaScript,Sign and unsign cookies,,,https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz,,,,,,https://github.com/visionmedia/node-cookie-signature/issues,,git+https://github.com/visionmedia/node-cookie-signature.git,,,,,,,pkg:npm/cookie-signature@1.0.3 +path,type,name,base_name,extension,size,date,sha1,md5,sha256,mime_type,file_type,programming_language,is_binary,is_text,is_archive,is_media,is_source,is_script,percentage_of_license_text,files_count,dirs_count,size_count,scan_errors,license_expression,license__key,license__score,license__name,license__short_name,license__category,license__is_exception,license__is_unknown,license__owner,license__homepage_url,license__text_url,license__reference_url,license__scancode_text_url,license__scancode_data_url,license__spdx_license_key,license__spdx_url,start_line,end_line,matched_rule__identifier,matched_rule__license_expression,matched_rule__licenses,matched_rule__referenced_filenames,matched_rule__is_license_text,matched_rule__is_license_notice,matched_rule__is_license_reference,matched_rule__is_license_tag,matched_rule__is_license_intro,matched_rule__has_unknown,matched_rule__matcher,matched_rule__rule_length,matched_rule__matched_length,matched_rule__match_coverage,matched_rule__rule_relevance,copyright,holder,email,url,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__file_references,package__extra_data,package__repository_homepage_url,package__repository_download_url,package__api_data_url,package__datasource_id,package__purl +json2csv.rb,file,json2csv.rb,json2csv,.rb,912,2021-10-26,1236469a06a2bacbdd8e172ad718482af5b0a936,1307c281e0b153202e291b217eab85d5,12ba215313981dbe810d9ed696b7cc753d97adfcc26eba1e13f941dc7506aa4e,text/x-script.python,"Python script, ASCII text executable",Ruby,False,True,False,False,True,True,62.04,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,apache-2.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,apache-2.0,100.00,Apache License 2.0,Apache 2.0,Permissive,False,False,Apache Software Foundation,http://www.apache.org/licenses/,http://www.apache.org/licenses/LICENSE-2.0,https://scancode-licensedb.aboutcode.org/apache-2.0,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml,Apache-2.0,https://spdx.org/licenses/Apache-2.0,5,13,apache-2.0_7.RULE,apache-2.0,apache-2.0,,,True,,,,,2-aho,85,85,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,3,,,,,,,,,,,,,,,,Copyright (c) 2017 nexB Inc. and others,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,3,,,,,,,,,,,,,,,,,nexB Inc. and others,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4,,,,,,,,,,,,,,,,,,,http://nexb.com/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4,,,,,,,,,,,,,,,,,,,https://github.com/nexB/scancode-toolkit/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +json2csv.rb,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,8,,,,,,,,,,,,,,,,,,,http://www.apache.org/licenses/LICENSE-2.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +license,file,license,license,,679,2021-10-26,75c5490a718ddd45e40e0cc7ce0c756abc373123,b965a762efb9421cf1bf4405f336e278,a34098a43e5677495f59dff825a3f9bc0f2b0261d75feb2356919f4c3ce049ab,text/plain,ASCII text,,False,True,False,False,False,False,100.0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +license,,,,,,,,,,,,,,,,,,,,,,,,gpl-2.0-plus,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +license,,,,,,,,,,,,,,,,,,,,,,,,,gpl-2.0-plus,100.00,GNU General Public License 2.0 or later,GPL 2.0 or later,Copyleft,False,False,Free Software Foundation (FSF),http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html,http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html,https://scancode-licensedb.aboutcode.org/gpl-2.0-plus,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml,GPL-2.0-or-later,https://spdx.org/licenses/GPL-2.0-or-later,1,12,gpl-2.0-plus_420.RULE,gpl-2.0-plus,gpl-2.0-plus,,,True,,,,,1-hash,113,113,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,file,package.json,package,.json,2200,2021-10-26,918376afce796ef90eeda1d6695f2289c90491ac,1f66239a9b850c5e60a9382dbe2162d2,29f6068a1b6c7d06f115a5edc4ed8558edde42c6bbf0145ed77cf1108a0dd529,application/json,JSON data,,False,True,False,False,False,False,58.1,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,mit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,mit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,mit,100.00,MIT License,MIT License,Permissive,False,False,MIT,http://opensource.org/licenses/mit-license.php,http://opensource.org/licenses/mit-license.php,https://scancode-licensedb.aboutcode.org/mit,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml,MIT,https://spdx.org/licenses/MIT,24,24,mit_649.RULE,mit,mit,,,True,,,,,2-aho,4,4,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,mit,100.00,MIT License,MIT License,Permissive,False,False,MIT,http://opensource.org/licenses/mit-license.php,http://opensource.org/licenses/mit-license.php,https://scancode-licensedb.aboutcode.org/mit,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE,https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml,MIT,https://spdx.org/licenses/MIT,24,24,mit.LICENSE,mit,mit,,True,,,,,,2-aho,161,161,100.00,100.00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,24,,,,,,,,,,,,,,,,Copyright (c) 2012 LearnBoost ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,24,,,,,,,,,,,,,,,,,LearnBoost,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,12,,,,,,,,,,,,,,,,,,tj@learnboost.com,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,16,16,,,,,,,,,,,,,,,,,,,https://github.com/visionmedia/node-cookie-signature.git,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,27,,,,,,,,,,,,,,,,,,,https://github.com/visionmedia/node-cookie-signature/issues,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,npm,,cookie-signature,v 1.0.3,,,JavaScript,Sign and unsign cookies,,,https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz,,,,,,https://github.com/visionmedia/node-cookie-signature/issues,,git+https://github.com/visionmedia/node-cookie-signature.git,,,,,,,https://www.npmjs.com/package/cookie-signature,https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz,https://registry.npmjs.org/cookie-signature/1.0.3,npm_package_json,pkg:npm/cookie-signature@1.0.3 diff --git a/tests/formattedcode/data/csv/packages/expected-no-root.csv b/tests/formattedcode/data/csv/packages/expected-no-root.csv index 8bdfeb3fc38..fcd75a18870 100644 --- a/tests/formattedcode/data/csv/packages/expected-no-root.csv +++ b/tests/formattedcode/data/csv/packages/expected-no-root.csv @@ -1,3 +1,3 @@ -path,type,scan_errors,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__contains_source_code,package__extra_data,package__purl -package.json,file,,,,,,,,,,,,,,,,,,,,,,,,,,, -package.json,,,npm,,npm,v 2.13.5,,,JavaScript,a package manager for JavaScript,,https://docs.npmjs.com/,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,,a124386bce4a90506f28ad4b1d1a804a17baaf32,,,,http://github.com/npm/npm/issues,,git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c,,artistic-2.0,Artistic-2.0,,,,pkg:npm/npm@2.13.5 +path,type,scan_errors,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__file_references,package__extra_data,package__repository_homepage_url,package__repository_download_url,package__api_data_url,package__datasource_id,package__purl +package.json,file,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package.json,,,npm,,npm,v 2.13.5,,,JavaScript,a package manager for JavaScript,,https://docs.npmjs.com/,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,,a124386bce4a90506f28ad4b1d1a804a17baaf32,,,,http://github.com/npm/npm/issues,,git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c,,artistic-2.0,Artistic-2.0,,,,https://www.npmjs.com/package/npm,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,https://registry.npmjs.org/npm/2.13.5,npm_package_json,pkg:npm/npm@2.13.5 diff --git a/tests/formattedcode/data/csv/packages/expected.csv b/tests/formattedcode/data/csv/packages/expected.csv index c444d140972..e402a935a96 100644 --- a/tests/formattedcode/data/csv/packages/expected.csv +++ b/tests/formattedcode/data/csv/packages/expected.csv @@ -1,4 +1,4 @@ -path,type,scan_errors,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__contains_source_code,package__extra_data,package__purl -scan/,directory,,,,,,,,,,,,,,,,,,,,,,,,,,, -scan/package.json,file,,,,,,,,,,,,,,,,,,,,,,,,,,, -scan/package.json,,,npm,,npm,v 2.13.5,,,JavaScript,a package manager for JavaScript,,https://docs.npmjs.com/,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,,a124386bce4a90506f28ad4b1d1a804a17baaf32,,,,http://github.com/npm/npm/issues,,git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c,,artistic-2.0,Artistic-2.0,,,,pkg:npm/npm@2.13.5 +path,type,scan_errors,package__type,package__namespace,package__name,package__version,package__qualifiers,package__subpath,package__primary_language,package__description,package__release_date,package__homepage_url,package__download_url,package__size,package__sha1,package__md5,package__sha256,package__sha512,package__bug_tracking_url,package__code_view_url,package__vcs_url,package__copyright,package__license_expression,package__declared_license,package__notice_text,package__file_references,package__extra_data,package__repository_homepage_url,package__repository_download_url,package__api_data_url,package__datasource_id,package__purl +scan/,directory,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +scan/package.json,file,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +scan/package.json,,,npm,,npm,v 2.13.5,,,JavaScript,a package manager for JavaScript,,https://docs.npmjs.com/,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,,a124386bce4a90506f28ad4b1d1a804a17baaf32,,,,http://github.com/npm/npm/issues,,git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c,,artistic-2.0,Artistic-2.0,,,,https://www.npmjs.com/package/npm,https://registry.npmjs.org/npm/-/npm-2.13.5.tgz,https://registry.npmjs.org/npm/2.13.5,npm_package_json,pkg:npm/npm@2.13.5 diff --git a/tests/formattedcode/test_output_csv.py b/tests/formattedcode/test_output_csv.py index e97cbe5bd57..a1a70f4c3c5 100644 --- a/tests/formattedcode/test_output_csv.py +++ b/tests/formattedcode/test_output_csv.py @@ -49,7 +49,7 @@ def check_json(result, expected_file, regen=REGEN_TEST_FIXTURES): def check_csvs(result_file, expected_file, - ignore_keys=('date', 'file_type', 'mime_type', 'package_uuid'), + ignore_keys=('date', 'file_type', 'mime_type', 'package_uid'), regen=REGEN_TEST_FIXTURES): """ Load and compare two CSVs. diff --git a/tests/licensedcode/data/plugin_license/package/package.expected.json b/tests/licensedcode/data/plugin_license/package/package.expected.json index fbf6cf9a779..abccb4c7d51 100644 --- a/tests/licensedcode/data/plugin_license/package/package.expected.json +++ b/tests/licensedcode/data/plugin_license/package/package.expected.json @@ -12,7 +12,6 @@ "output_format_version": "2.0.0", "message": null, "errors": [], - "warnings": [], "extra_data": { "spdx_license_list_version": "3.16", "files_count": 1 @@ -28,9 +27,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/dicer", - "for_package": "pkg:npm/busboy@0.2.14", - "lockfile": "package.json" + "dependency_uid": "pkg:npm/dicer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/busboy@0.2.14?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/readable-stream", @@ -40,9 +40,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/readable-stream", - "for_package": "pkg:npm/busboy@0.2.14", - "lockfile": "package.json" + "dependency_uid": "pkg:npm/readable-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/busboy@0.2.14?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -90,20 +91,19 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/busboy@0.2.14", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/busboy", + "repository_download_url": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "api_data_url": "https://registry.npmjs.org/busboy/0.2.14", + "package_uid": "pkg:npm/busboy@0.2.14?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "package.json" ], - "files": [ - "package.json" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/busboy@0.2.14", - "repository_homepage_url": "https://www.npmjs.com/package/busboy", - "repository_download_url": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "api_data_url": "https://registry.npmjs.org/busboy/0.2.14" + "purl": "pkg:npm/busboy@0.2.14" } ], "files": [ @@ -199,8 +199,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -222,14 +222,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/busboy@0.2.14", "repository_homepage_url": "https://www.npmjs.com/package/busboy", "repository_download_url": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "api_data_url": "https://registry.npmjs.org/busboy/0.2.14" + "api_data_url": "https://registry.npmjs.org/busboy/0.2.14", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/busboy@0.2.14" } ], "for_packages": [ - "pkg:npm/busboy@0.2.14" + "pkg:npm/busboy@0.2.14?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json b/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json index e0b8af62eac..f3c1639e600 100644 --- a/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json +++ b/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json @@ -13,7 +13,6 @@ "output_format_version": "2.0.0", "message": null, "errors": [], - "warnings": [], "extra_data": { "spdx_license_list_version": "3.16", "files_count": 2 @@ -63,21 +62,19 @@ "Artistic-2.0 OR MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/npm@2.13.5", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/package.json" ], - "files": [ - "scan/copyr.java", - "scan/package.json" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/npm@2.13.5", - "repository_homepage_url": "https://www.npmjs.com/package/npm", - "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "purl": "pkg:npm/npm@2.13.5" } ], "licenses_reference": [ @@ -317,9 +314,7 @@ ], "percentage_of_license_text": 100.0, "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "scan_errors": [] }, { @@ -411,18 +406,19 @@ "Artistic-2.0 OR MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ], "for_packages": [ - "pkg:npm/npm@2.13.5" + "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/licensedcode/test_plugin_license.py b/tests/licensedcode/test_plugin_license.py index 1ade2c198c2..f126911217a 100644 --- a/tests/licensedcode/test_plugin_license.py +++ b/tests/licensedcode/test_plugin_license.py @@ -274,4 +274,4 @@ def test_detection_is_correct_in_legacy_npm_package_json(): result_file = test_env.get_temp_file('json') expected_file = test_env.get_test_loc('plugin_license/package/package.expected.json') run_scan_click(['-lp', '--json-pp', result_file, test_dir]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) diff --git a/tests/licensedcode/test_plugin_licenses_reference.py b/tests/licensedcode/test_plugin_licenses_reference.py index 1dc8d2660a6..bbe0d1b1cb5 100644 --- a/tests/licensedcode/test_plugin_licenses_reference.py +++ b/tests/licensedcode/test_plugin_licenses_reference.py @@ -29,5 +29,5 @@ def test_licenses_reference_works(): run_scan_click(args) check_json_scan( test_env.get_test_loc('plugin_licenses_reference/scan.expected.json'), - result_file, remove_file_date=True, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, + result_file, remove_file_date=True, remove_uuid=True, regen=REGEN_TEST_FIXTURES, ) diff --git a/tests/scancode/data/only_findings/expected.json b/tests/scancode/data/only_findings/expected.json index 05991149cd2..d216053ec31 100644 --- a/tests/scancode/data/only_findings/expected.json +++ b/tests/scancode/data/only_findings/expected.json @@ -14,7 +14,6 @@ "qualifiers": {}, "subpath": null, "primary_language": null, - "contains_source_code": null, "description": null, "size": null, "release_date": null, From 2dd374fff4933a4a7776fd40bd8d902a42d2c82d Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 08:23:09 +0200 Subject: [PATCH 06/36] Adopt new handler design for ABOUT files Signed-off-by: Philippe Ombredanne --- src/packagedcode/about.py | 155 +++++++--- .../data/about/aboutfiles.expected.json | 278 ++++++++++++++++++ .../apipkg-1.4-py2.py3-none-any.whl | 0 .../data/about/apipkg.ABOUT-expected | 21 +- .../data/about/appdirs.ABOUT-expected | 21 +- tests/packagedcode/test_about.py | 22 +- 6 files changed, 437 insertions(+), 60 deletions(-) create mode 100644 tests/packagedcode/data/about/aboutfiles.expected.json create mode 100644 tests/packagedcode/data/about/aboutfiles/apipkg-1.4-py2.py3-none-any.whl diff --git a/src/packagedcode/about.py b/src/packagedcode/about.py index 5d09c64de56..4061946ebfb 100644 --- a/src/packagedcode/about.py +++ b/src/packagedcode/about.py @@ -8,56 +8,46 @@ # import io -import logging +import os +from pathlib import Path -import attr import saneyaml -from commoncode import filetype from packagedcode import models +from packageurl import PackageURL +# TODO: Override get_package_resource so it returns the Resource that the ABOUT file is describing + +TRACE = os.environ.get('SCANCODE_DEBUG_PACKAGE', False) -TRACE = False -logger = logging.getLogger(__name__) +def logger_debug(*args): + pass + if TRACE: + import logging import sys + + logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout) logger.setLevel(logging.DEBUG) -# TODO: Override get_package_resource so it returns the Resource that the ABOUT file is describing - -@attr.s() -class AboutPackageData(models.PackageData): - - default_type = 'about' - - def get_package_root(self, manifest_resource, codebase): - about_resource = self.extra_data.get('about_resource') - if about_resource: - manifest_resource_parent = manifest_resource.parent(codebase) - for child in manifest_resource_parent.children(codebase): - if child.name == about_resource: - return child - return manifest_resource - + def logger_debug(*args): + return logger.debug( + ' '.join(isinstance(a, str) and a or repr(a) for a in args) + ) -@attr.s() -class Aboutfile(AboutPackageData, models.PackageDataFile): - file_patterns = ('*.ABOUT',) - extensions = ('.ABOUT',) +class AboutFileHandler(models.DatafileHandler): + datasource_id = 'about_file' + default_package_type = 'about' + path_patterns = ('*.ABOUT',) + description = 'AboutCode ABOUT file' + documentation_url = 'https://aboutcode-toolkit.readthedocs.io/en/latest/specification.html' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.lower().endswith(('.about',)) - - @classmethod - def recognize(cls, location): + def parse(cls, location): """ Yield one or more Package manifest objects given a file ``location`` pointing to a package archive, manifest or similar. @@ -65,32 +55,113 @@ def recognize(cls, location): with io.open(location, encoding='utf-8') as loc: package_data = saneyaml.load(loc.read()) - name = package_data.get('name') - # FIXME: having no name may not be a problem See #1514 - if not name: - return + # About files can contain any purl and also have a namespace + about_type = package_data.get('type') + about_ns = package_data.get('namespace') + purl_type = None + purl_ns = None + purl = package_data.get('purl') + if purl: + purl = PackageURL.from_string(purl) + if purl: + purl_type = purl.type + package_type = about_type or purl_type or cls.default_package_type + package_ns = about_ns or purl_ns + + name = package_data.get('name') version = package_data.get('version') + homepage_url = package_data.get('home_url') or package_data.get('homepage_url') download_url = package_data.get('download_url') - declared_license = package_data.get('license_expression') copyright_statement = package_data.get('copyright') + license_expression = package_data.get('license_expression') + declared_license = license_expression + owner = package_data.get('owner') if not isinstance(owner, str): owner = repr(owner) parties = [models.Party(type=models.party_person, name=owner, role='owner')] - about_package = cls( - type='about', + # FIXME: also include notice_file and license_file(s) as file_references + file_references = [] + about_resource = package_data.get('about_resource') + if about_resource: + file_references.append(models.FileReference(path=about_resource)) + + # FIXME: we should put the unprocessed attributes in extra data + yield models.PackageData( + datasource_id=cls.datasource_id, + type=package_type, + namespace=package_ns, name=name, version=version, declared_license=declared_license, + license_expression=license_expression, copyright=copyright_statement, parties=parties, homepage_url=homepage_url, download_url=download_url, + file_references=file_references, ) - about_package.extra_data['about_resource'] = package_data.get('about_resource') - yield about_package + @classmethod + def assemble(cls, package_data, resource, codebase): + """ + Yield a Package. Note that ABOUT files do not carry dependencies. + """ + datafile_path = resource.path + # do we have enough to create a package? + if package_data.purl: + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=datafile_path, + ) + package_uid = package.package_uid + + # NOTE: we do not attach files to the Package level. Instead we + # update `for_package` in the file + resource.for_packages.append(package_uid) + resource.save(codebase) + + if not package.license_expression: + package.license_expression = cls.compute_normalized_license(package) + + yield package + + if resource.pid is not None and package_data.file_references: + parent_resource = resource.parent(codebase) + if parent_resource and package_data.file_references: + root_path = Path(parent_resource.path) + + # FIXME: we should be able to get the path relatively to the + # ABOUT file resource a file ref extends from the root of + # the filesystem + file_references_by_path = { + str(root_path / ref.path): ref + for ref in package.file_references + } + + for res in parent_resource.walk(codebase): + ref = file_references_by_path.get(res.path) + if not ref: + continue + + # path is found and processed: remove it, so we can + # check if we found all of them + del file_references_by_path[res.path] + res.for_packages.append(package_uid) + res.save(codebase) + + yield res + + # if we have left over file references, add these to extra data + if file_references_by_path: + missing = sorted(file_references_by_path.values(), key=lambda r: r.path) + package.extra_data['missing_file_references'] = missing + else: + package.extra_data['missing_file_references'] = package_data.file_references[:] + + # we yield this as we do not want this further processed + yield resource diff --git a/tests/packagedcode/data/about/aboutfiles.expected.json b/tests/packagedcode/data/about/aboutfiles.expected.json new file mode 100644 index 00000000000..bb946100191 --- /dev/null +++ b/tests/packagedcode/data/about/aboutfiles.expected.json @@ -0,0 +1,278 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 3 + } + } + ], + "dependencies": [], + "packages": [ + { + "type": "about", + "namespace": null, + "name": "apipkg", + "version": "1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "Holger Krekel", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://bitbucket.org/hpk42/apipkg", + "download_url": "https://pypi.python.org/packages/94/72/fd4f2e46ce7b0d388191c819ef691c8195fab09602bbf1a2f92aa5351444/apipkg-1.4-py2.py3-none-any.whl#md5=5644eb6aff3f19e13430251a820e987f", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2009 holger krekel", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "aboutfiles/apipkg.ABOUT" + ], + "datasource_ids": [ + "about_file" + ], + "purl": "pkg:about/apipkg@1.4" + }, + { + "type": "about", + "namespace": null, + "name": "appdirs", + "version": "1.4.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "ActiveState", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://pypi.python.org/pypi/appdirs", + "download_url": "https://pypi.python.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl#md5=9ed4b51c9611775c3078b3831072e153", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2010 ActiveState Software Inc.", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "extra_data": { + "missing_file_references": [ + { + "path": "appdirs-1.4.3-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:about/appdirs@1.4.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "aboutfiles/appdirs.ABOUT" + ], + "datasource_ids": [ + "about_file" + ], + "purl": "pkg:about/appdirs@1.4.3" + } + ], + "files": [ + { + "path": "aboutfiles", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "aboutfiles/apipkg-1.4-py2.py3-none-any.whl", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "aboutfiles/apipkg.ABOUT", + "type": "file", + "package_data": [ + { + "type": "about", + "namespace": null, + "name": "apipkg", + "version": "1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "Holger Krekel", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://bitbucket.org/hpk42/apipkg", + "download_url": "https://pypi.python.org/packages/94/72/fd4f2e46ce7b0d388191c819ef691c8195fab09602bbf1a2f92aa5351444/apipkg-1.4-py2.py3-none-any.whl#md5=5644eb6aff3f19e13430251a820e987f", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2009 holger krekel", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "apipkg-1.4-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/apipkg@1.4" + } + ], + "for_packages": [ + "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "aboutfiles/appdirs.ABOUT", + "type": "file", + "package_data": [ + { + "type": "about", + "namespace": null, + "name": "appdirs", + "version": "1.4.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "ActiveState", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://pypi.python.org/pypi/appdirs", + "download_url": "https://pypi.python.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl#md5=9ed4b51c9611775c3078b3831072e153", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2010 ActiveState Software Inc.", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "appdirs-1.4.3-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/appdirs@1.4.3" + } + ], + "for_packages": [ + "pkg:about/appdirs@1.4.3?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/about/aboutfiles/apipkg-1.4-py2.py3-none-any.whl b/tests/packagedcode/data/about/aboutfiles/apipkg-1.4-py2.py3-none-any.whl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/packagedcode/data/about/apipkg.ABOUT-expected b/tests/packagedcode/data/about/apipkg.ABOUT-expected index 3511553f3f8..08812f564fb 100644 --- a/tests/packagedcode/data/about/apipkg.ABOUT-expected +++ b/tests/packagedcode/data/about/apipkg.ABOUT-expected @@ -33,15 +33,24 @@ "license_expression": "mit", "declared_license": "mit", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": { - "about_resource": "apipkg-1.4-py2.py3-none-any.whl" - }, + "file_references": [ + { + "path": "apipkg-1.4-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:about/apipkg@1.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/apipkg@1.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/about/appdirs.ABOUT-expected b/tests/packagedcode/data/about/appdirs.ABOUT-expected index 4a70bccc4e7..aac38fa21bd 100644 --- a/tests/packagedcode/data/about/appdirs.ABOUT-expected +++ b/tests/packagedcode/data/about/appdirs.ABOUT-expected @@ -33,15 +33,24 @@ "license_expression": "mit", "declared_license": "mit", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": { - "about_resource": "appdirs-1.4.3-py2.py3-none-any.whl" - }, + "file_references": [ + { + "path": "appdirs-1.4.3-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:about/appdirs@1.4.3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/appdirs@1.4.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_about.py b/tests/packagedcode/test_about.py index acb8e6db2e8..732240838cd 100644 --- a/tests/packagedcode/test_about.py +++ b/tests/packagedcode/test_about.py @@ -12,7 +12,8 @@ from packagedcode import about from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES - +from scancode.cli_test_utils import run_scan_click +from scancode.cli_test_utils import check_json_scan class TestAbout(PackageTester): @@ -20,16 +21,25 @@ class TestAbout(PackageTester): def test_can_detect_aboutfile(self): test_file = self.get_test_loc('about/aboutfiles/apipkg.ABOUT') - assert about.Aboutfile.is_package_data_file(test_file) + assert about.AboutFileHandler.is_datafile(test_file) def test_parse_about_file_home_url(self): test_file = self.get_test_loc('about/aboutfiles/apipkg.ABOUT') - package = about.Aboutfile.recognize(test_file) + package = about.AboutFileHandler.parse(test_file) expected_loc = self.get_test_loc('about/apipkg.ABOUT-expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_about_file_homepage_url(self): test_file = self.get_test_loc('about/aboutfiles/appdirs.ABOUT') - package = about.Aboutfile.recognize(test_file) + package = about.AboutFileHandler.parse(test_file) expected_loc = self.get_test_loc('about/appdirs.ABOUT-expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_scan_cli_works(self): + test_file = self.get_test_loc('about/aboutfiles') + expected_file = self.get_test_loc('about/aboutfiles.expected.json') + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES + ) From 472fc3127acb31261b8b457a884bf37fad0d9178 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 08:24:40 +0200 Subject: [PATCH 07/36] Update testing utilities for package handlers Signed-off-by: Philippe Ombredanne --- tests/packagedcode/packages_test_utils.py | 38 ++++++++++++++++------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/tests/packagedcode/packages_test_utils.py b/tests/packagedcode/packages_test_utils.py index 04a34c17d71..2ee6599078b 100644 --- a/tests/packagedcode/packages_test_utils.py +++ b/tests/packagedcode/packages_test_utils.py @@ -18,7 +18,6 @@ from scancode_config import REGEN_TEST_FIXTURES - class PackageTester(testcase.FileBasedTesting): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') @@ -37,15 +36,14 @@ def check_package_parse( package = package_function(manifest_loc) if not package: raise Exception(f'Failed to parse package: {manifest_loc}') - return self.check_package(package, expected_loc, regen) + return self.check_package_data(package, expected_loc, regen) - def check_package(self, package, expected_loc, regen=REGEN_TEST_FIXTURES): + def check_package_data(self, package_data, expected_loc, regen=REGEN_TEST_FIXTURES): """ Helper to test a package object against an expected JSON file. """ - - package.license_expression = package.compute_normalized_license() - results = package.to_dict() + compute_and_set_license_expression(package_data) + results = package_data.to_dict() expected_loc = self.get_test_loc(expected_loc, must_exist=False) check_result_equals_expected_json( @@ -54,16 +52,16 @@ def check_package(self, package, expected_loc, regen=REGEN_TEST_FIXTURES): regen=regen, ) - def check_packages(self, packages, expected_loc, regen=REGEN_TEST_FIXTURES): + def check_packages_data(self, packages_data, expected_loc, must_exist=True, regen=REGEN_TEST_FIXTURES): """ - Helper to test a list of package objects against an expected JSON file. + Helper to test a list of package_data objects against an expected JSON file. """ - expected_loc = self.get_test_loc(expected_loc) + expected_loc = self.get_test_loc(expected_loc, must_exist=must_exist) results = [] - for package in packages: - package.license_expression = package.compute_normalized_license() - results.append(package.to_dict()) + for package_data in packages_data: + compute_and_set_license_expression(package_data) + results.append(package_data.to_dict()) check_result_equals_expected_json( result=results, @@ -72,6 +70,16 @@ def check_packages(self, packages, expected_loc, regen=REGEN_TEST_FIXTURES): ) +def compute_and_set_license_expression(package_data): + if package_data.declared_license and not package_data.license_expression: + from packagedcode import HANDLER_BY_DATASOURCE_ID + handler = HANDLER_BY_DATASOURCE_ID[package_data.datasource_id] + computed = handler.compute_normalized_license(package_data) + if computed: + package_data.license_expression = computed + return package_data + + def check_result_equals_expected_json(result, expected_loc, regen=REGEN_TEST_FIXTURES): """ Check equality between a result collection and the data in an expected_loc @@ -170,3 +178,9 @@ def build_tests( regen=regen, ) setattr(clazz, test_name, test_method) + + +def compare_package_results(expected, result): + result_packages = [r.to_dict() for r in result] + expected_packages = [e.to_dict() for e in expected] + assert result_packages == expected_packages From fbdba2ec53d4c147c7170150c94e32609783c6cf Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 08:26:58 +0200 Subject: [PATCH 08/36] Adopt new handler design for Alpine Linux We now have separate handlers: * AlpineApkArchiveHandler * AlpineInstalledDatabaseHandler * AlpineApkbuildHandler Signed-off-by: Philippe Ombredanne --- src/packagedcode/alpine.py | 282 ++++--- .../bluedevil/APKBUILD-expected.json | 7 +- .../breeze-grub/APKBUILD-expected.json | 7 +- .../breeze-gtk/APKBUILD-expected.json | 7 +- .../breeze-plymouth/APKBUILD-expected.json | 7 +- .../community/breeze/APKBUILD-expected.json | 7 +- .../community/discover/APKBUILD-expected.json | 7 +- .../community/drkonqi/APKBUILD-expected.json | 7 +- .../jool-modules-lts/APKBUILD-expected.json | 7 +- .../jool-modules-rpi/APKBUILD-expected.json | 7 +- .../kactivitymanagerd/APKBUILD-expected.json | 7 +- .../kde-cli-tools/APKBUILD-expected.json | 7 +- .../kde-gtk-config/APKBUILD-expected.json | 7 +- .../kdecoration/APKBUILD-expected.json | 7 +- .../kdeplasma-addons/APKBUILD-expected.json | 7 +- .../community/kgamma5/APKBUILD-expected.json | 7 +- .../community/khotkeys/APKBUILD-expected.json | 7 +- .../kinfocenter/APKBUILD-expected.json | 7 +- .../kmenuedit/APKBUILD-expected.json | 7 +- .../community/kscreen/APKBUILD-expected.json | 7 +- .../kscreenlocker/APKBUILD-expected.json | 7 +- .../ksshaskpass/APKBUILD-expected.json | 7 +- .../kwallet-pam/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../kwayland-server/APKBUILD-expected.json | 7 +- .../community/kwin/APKBUILD-expected.json | 7 +- .../community/kwrited/APKBUILD-expected.json | 7 +- .../layer-shell-qt/APKBUILD-expected.json | 7 +- .../libkscreen/APKBUILD-expected.json | 7 +- .../libksysguard/APKBUILD-expected.json | 7 +- .../libreoffice/APKBUILD-expected.json | 7 +- .../community/milou/APKBUILD-expected.json | 7 +- .../community/mpd/APKBUILD-expected.json | 7 +- .../community/oxygen/APKBUILD-expected.json | 7 +- .../community/parole/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../plasma-desktop/APKBUILD-expected.json | 7 +- .../plasma-disks/APKBUILD-expected.json | 7 +- .../plasma-firewall/APKBUILD-expected.json | 7 +- .../plasma-integration/APKBUILD-expected.json | 7 +- .../plasma-nano/APKBUILD-expected.json | 7 +- .../plasma-nm/APKBUILD-expected.json | 7 +- .../plasma-pa/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../plasma-sdk/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../plasma-thunderbolt/APKBUILD-expected.json | 7 +- .../plasma-vault/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../plasma-workspace/APKBUILD-expected.json | 7 +- .../plymouth-kcm/APKBUILD-expected.json | 7 +- .../polkit-kde-agent-1/APKBUILD-expected.json | 7 +- .../powerdevil/APKBUILD-expected.json | 7 +- .../qqc2-breeze-style/APKBUILD-expected.json | 7 +- .../qt6-qtbase/APKBUILD-expected.json | 7 +- .../rtpengine-lts/APKBUILD-expected.json | 7 +- .../community/sddm-kcm/APKBUILD-expected.json | 7 +- .../systemsettings/APKBUILD-expected.json | 7 +- .../community/ufw/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../main/cmake/APKBUILD-expected.json | 7 +- .../main/kamailio/APKBUILD-expected.json | 7 +- .../main/libburn/APKBUILD-expected.json | 7 +- .../main/linux-lts/APKBUILD-expected.json | 7 +- .../main/linux-rpi/APKBUILD-expected.json | 7 +- .../main/lua-unit/APKBUILD-expected.json | 7 +- .../main/sqlite-tcl/APKBUILD-expected.json | 7 +- .../main/sqlite/APKBUILD-expected.json | 7 +- .../alpine14/main/sqsh/APKBUILD-expected.json | 7 +- .../alpine14/main/sudo/APKBUILD-expected.json | 7 +- .../main/util-linux/APKBUILD-expected.json | 7 +- .../testing/linux-edge/APKBUILD-expected.json | 7 +- .../testing/linux-elm/APKBUILD-expected.json | 7 +- .../testing/linux-gru/APKBUILD-expected.json | 7 +- .../community/abook/APKBUILD-expected.json | 7 +- .../darktable/APKBUILD-expected.json | 7 +- .../community/haxe/APKBUILD-expected.json | 7 +- .../linux-firmware/APKBUILD-expected.json | 7 +- .../community/2bwm/APKBUILD-expected.json | 7 +- .../community/acccheck/APKBUILD-expected.json | 7 +- .../accerciser/APKBUILD-expected.json | 7 +- .../community/alpine/APKBUILD-expected.json | 7 +- .../audacious-plugins/APKBUILD-expected.json | 7 +- .../boost-build/APKBUILD-expected.json | 7 +- .../dircproxy/APKBUILD-expected.json | 7 +- .../community/faac/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../community/gcc6/APKBUILD-expected.json | 7 +- .../hunspell-de-de/APKBUILD-expected.json | 7 +- .../imagemagick/APKBUILD-expected.json | 7 +- .../imagemagick6/APKBUILD-expected.json | 7 +- .../community/libluv/APKBUILD-expected.json | 7 +- .../nymphcast-client/APKBUILD-expected.json | 7 +- .../openjdk10/APKBUILD-expected.json | 7 +- .../py3-cairosvg/APKBUILD-expected.json | 7 +- .../community/qt6-qt3d/APKBUILD-expected.json | 7 +- .../ruby-rspec/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../community/vtk/APKBUILD-expected.json | 7 +- .../community/zsnes/APKBUILD-expected.json | 7 +- .../alpine14/main/gcc/APKBUILD-expected.json | 7 +- .../alpine14/main/icu/APKBUILD-expected.json | 7 +- .../alpine14/main/ruby/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../gitlab-release-cli/APKBUILD-expected.json | 7 +- .../gtksourceviewmm3/APKBUILD-expected.json | 7 +- .../testing/pnmixer/APKBUILD-expected.json | 7 +- .../APKBUILD-expected.json | 7 +- .../buildbot/APKBUILD-expected.json | 7 +- .../full-installed/installed-expected.json | 694 ++++++++++-------- .../single-installed/installed-expected.json | 53 +- .../small-installed/installed-expected.json | 679 +++++++++-------- tests/packagedcode/test_alpine.py | 12 +- 118 files changed, 1458 insertions(+), 1053 deletions(-) diff --git a/src/packagedcode/alpine.py b/src/packagedcode/alpine.py index a1629e5202e..1bbc50947d4 100644 --- a/src/packagedcode/alpine.py +++ b/src/packagedcode/alpine.py @@ -14,6 +14,7 @@ from functools import partial from datetime import datetime from os import path +from pathlib import Path import attr from license_expression import LicenseSymbolLike @@ -23,69 +24,143 @@ from packagedcode import bashparse from packagedcode import models from packagedcode.utils import combine_expressions +from packagedcode.utils import get_ancestor from textcode.analysis import as_unicode -@attr.s() -class AlpinePackage(models.PackageData, models.PackageDataFile): - extensions = ('.apk', 'APKBUILD') - default_type = 'alpine' +# TODO: implement me! See parse_pkginfo +class AlpineApkArchiveHandler(models.DatafileHandler): + # NOTE that Android .apk are zip and Alpine .apk tar gzipped tarball + datasource_id = 'alpine_apk_archive' + path_patterns = ('*.apk',) + filetypes = ('gzip compressed data',) + default_package_type = 'alpine' + description = 'Alpine Linux .apk package archive' + documentation_url = 'https://wiki.alpinelinux.org/wiki/Alpine_package_format' @classmethod - def recognize(cls, location): - return parse_apkbuild(location, strict=True) - - def compute_normalized_license(self): - _declared, detected = detect_declared_license(self.declared_license) + def compute_normalized_license(cls, package): + _declared, detected = detect_declared_license(package.declared_license) return detected - def to_dict(self, _detailed=False, **kwargs): - data = super().to_dict(**kwargs) - if _detailed: - ################################################# - data['installed_files'] = [istf.to_dict() for istf in (self.installed_files or [])] - ################################################# - else: - ################################################# - # remove temporary fields - data.pop('installed_files', None) - ################################################# - return data +class AlpineInstalledDatabaseHandler(models.DatafileHandler): + datasource_id = 'alpine_installed_db' + path_patterns = ('*lib/apk/db/installed',) + default_package_type = 'alpine' + description = 'Alpine Linux installed package database' + @classmethod + def parse(cls, location): + yield from parse_alpine_installed_db(location) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # get the root resource of the rootfs + levels_up = len('lib/apk/db/installed'.split('/')) + root_resource = get_ancestor( + levels_up=levels_up, + resource=resource, + codebase=codebase, + ) + + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=resource.path, + ) + package_uid = package.package_uid + + package.license_expression = cls.compute_normalized_license(package) + + dependent_packages = package_data.dependencies + if dependent_packages: + yield from models.Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=resource.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) + + root_path = Path(root_resource.path) + # a file ref extends from the root of the filesystem + file_references_by_path = { + str(root_path / ref.path): ref + for ref in package.file_references + } + + for res in root_resource.walk(codebase): + ref = file_references_by_path.get(res.path) + if not ref: + continue + + # path is found and processed: remove it, so we can check if we + # found all of them + del file_references_by_path[res.path] + res.for_packages.append(package_uid) + res.save(codebase) + + yield res + + # if we have left over file references, add these to extra data + if file_references_by_path: + missing = sorted(file_references_by_path.values(), key=lambda r:r.path) + package.extra_data['missing_file_references'] = missing -def get_installed_packages(root_dir, **kwargs): - """ - Yield Package objects given a ``root_dir`` rootfs directory. - """ - installed_file_loc = path.join(root_dir, 'lib/apk/db/installed') - if not path.exists(installed_file_loc): - return - for package in parse_alpine_installed_db(installed_file_loc): yield package -def parse_alpine_installed_db(location): +class AlpineApkbuildHandler(models.DatafileHandler): + datasource_id = 'alpine_apkbuild' + path_patterns = ('*APKBUILD',) + default_package_type = 'alpine' + description = 'Alpine Linux APKBUILD package script' + documentation_url = 'https://wiki.alpinelinux.org/wiki/APKBUILD_Reference' + + @classmethod + def parse(cls, location): + parsed = parse_apkbuild(location, strict=True) + if parsed: + yield parsed + + @classmethod + def compute_normalized_license(cls, package): + _declared, detected = detect_declared_license(package.declared_license) + return detected + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + cls.assign_package_to_parent_tree( + package=package, + resource=resource, + codebase=codebase, + ) + + +def parse_alpine_installed_db(location, datasource_id, package_type): """ - Yield AlpinePackage objects from an installed database file at `location` + Yield PackageData objects from an installed database file at `location` or None. Typically found at '/lib/apk/db/installed' in an Alpine installation. - Note: http://uk.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz are + Note: http://uk.alpinelinux.org/alpine/v3.15/main/x86_64/APKINDEX.tar.gz are also in the same format as an installed database. """ - for fields in get_alpine_installed_db_fields(location): - yield build_package(fields) + for package_fields in get_alpine_installed_db_fields(location): + yield build_package_data( + package_fields=package_fields, + datasource_id=datasource_id, + package_type=package_type, + ) def get_alpine_installed_db_fields(location): """ - Yield lists of (name, value) pairsfrom an installed database file at `location` - Typically found at '/lib/apk/db/installed' in an Alpine - installation. + Yield lists of (name, value) pairs, one list for each package found in an + installed Alpine packages database file at `location` (typically found at + '/lib/apk/db/installed' in an Alpine installation.) - Note: http://uk.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz are - also in the same format as an installed database. + Note: APKINDEX index files are also in the same format. + See: http://uk.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz """ if not path.exists(location): return @@ -104,10 +179,6 @@ def get_alpine_installed_db_fields(location): yield [(n.strip(), v.strip(),) for n, v in fields.items()] -def is_apkbuild(location): - return location and location.endswith('APKBUILD') - - # these variables need to be resolved or else this is a parsing error # we also only use these variables APKBUILD_VARIABLES = set([ @@ -143,15 +214,20 @@ def is_apkbuild(location): def parse_apkbuild(location, strict=False): """ - Return an AlpinePackage object from an APKBUILD file at `location` or None. - """ - if not path.exists(location) or not is_apkbuild(location): - return + Return a PackageData object from an APKBUILD file at ``location`` or None. + If ``strict`` is True, raise ApkbuildParseFailure error if any attribute + value cannot be fully resolved for shell variables. + """ with open(location, 'rb') as f: apkbuild = as_unicode(f.read()) - return parse_apkbuild_text(text=apkbuild, strict=strict) + return parse_apkbuild_text( + text=apkbuild, + datasource_id=AlpineApkbuildHandler.datasource_id, + package_type=AlpineApkbuildHandler.default_package_type, + strict=strict, + ) class ApkbuildParseFailure(Exception): @@ -516,7 +592,7 @@ def fix_mpd(text, *args): @attr.s class ApkBuildFixer: """ - Represent a syntax fix: + Represent an APKBUILD syntax fix: ``if_these_strings_are_present`` in ``text``, call ``function(text, *args)`` that returns ``text``. @@ -627,10 +703,13 @@ def fix_apkbuild(text): return text -def parse_apkbuild_text(text, strict=False,): +def parse_apkbuild_text(text, datasource_id, package_type, strict=False): """ - Return an AlpinePackage object from an APKBUILD text context or None. Only + Return a PackageData object from an APKBUILD text context or None. Only consider variables with a name listed in the ``names`` set. + + If ``strict`` is True, raise ApkbuildParseFailure error if any attribute + value cannot be fully resolved for shell variables. """ if not text: return @@ -650,7 +729,11 @@ def parse_apkbuild_text(text, strict=False,): f'errors: {errors}', ) variables = ((v.name, v.value,) for v in variables) - package = build_package(variables) + package = build_package_data( + variables, + datasource_id=datasource_id, + package_type=package_type + ) if package and unresolved: unresolved = [v.to_dict() for v in unresolved] @@ -660,9 +743,9 @@ def parse_apkbuild_text(text, strict=False,): def parse_pkginfo(location): """ - Return an AlpinePackage object from aa .PKGINFO file at ``location`` or None. - .PKGINFO is a file created by abuild from package metadata in APKBUILD - and that is found at the root of a package .apk tarball. + Return a PackageData object from a .PKGINFO file at ``location`` or None. + .PKGINFO is a metadata is found at the root of an .apk tarball and is + derived from the package metadata in APKBUILD Each lines are in the format of "name = value" such as in:: @@ -685,14 +768,21 @@ def parse_pkginfo(location): depend = imagemagick """ - raise NotImplementedError('TODO: implement me') + raise NotImplementedError -def build_package(package_fields): +def build_package_data(package_fields, datasource_id, package_type): """ - Return an AlpinePackage object from a `package_fields` iterable of (name, - value) tuples. The package_fields comes from the APKINDEX and installed - database files that use one-letter field names. + Return a PackageData object from a ``package_fields`` iterable of (name, + value) tuples. + + The ``package_fields`` names are either: + + - the short form one-letter field names used in an APKINDEX and an installed + database file + + - the long form field names seen in an APKBUILD build manifest/script and an + APKINFO data file. Note: we do NOT use a dict for ``package_fields`` because some fields names may occur more than once. @@ -705,9 +795,13 @@ def build_package(package_fields): """ package_fields = list(package_fields) all_fields = dict(package_fields) + # mapping of actual Package field name -> value that have been converted to # the expected normalized format - converted_fields = {} + converted_fields = { + 'datasource_id': datasource_id, + 'type': package_type, + } for name, value in package_fields: handler = package_handlers_by_field_name.get(name) if handler: @@ -727,9 +821,10 @@ def build_package(package_fields): converted_fields.update(converted) - return AlpinePackage.create(**converted_fields) + return models.PackageData.from_dict(converted_fields) -# Note handlers MUST accept **kwargs as they also receive the current data +##################################### +# Note: all handlers MUST accept **kwargs as they also receive the current data # being processed so far as a processed_data kwarg, but most do not use it @@ -746,6 +841,11 @@ def handler(value, **kwargs): def apkbuild_version_handler(value, all_fields, **kwargs): + """ + Return a version suffixed with its release. + + TODO: should this be used everywhere? + """ pkgrel = all_fields.get('pkgrel') rel_suffix = f'-r{pkgrel}' if pkgrel else '' return {'version': f'{value}{rel_suffix}'} @@ -799,7 +899,7 @@ def m_maintainer_handler(value, **kwargs): name=name, email=email, ) - parties.append(maintainer) + parties.append(maintainer.to_dict()) return {'parties': parties} @@ -895,7 +995,7 @@ def D_dependencies_handler(value, dependencies=None, **kwargs): is_resolved=is_resolved, ) if dependency not in dependencies: - dependencies.append(dependency) + dependencies.append(dependency.to_dict()) return {'dependencies': dependencies} @@ -918,40 +1018,46 @@ def c_git_commit_handler(value, **kwargs): def A_arch_handler(value, **kwargs): """ - Return a Package URL qualifier for the arch. + Return a Package URL qualifiers for the arch. """ + # TODO: should arch={value} be rather a mapping of {arch: value} ? return {'qualifiers': f'arch={value}'} -# Note that we use a little trick for handling files. -# Each handler receives a copy of the data processed so far. -# As it happens, the data about files start with a directory enry -# then one or more files, each normally followed by their checksums -# We return and use the current_dir and current_file from these handlers -# to properly create a file for its directory (which is the current one) -# and add the checksum to its file (which is the current one). -# 'current_file' and 'current_dir' are not actual package fields, but we ignore -# these when we create the AlpinePcakge object +# Note that we use a little trick for handling package file references. Each +# handler receives a copy of the data processed so far. As it happens, the data +# about files starts with a directory entry then one or more files, each +# normally followed by their checksums We return and use the current_dir and +# current_file from these handlers to properly create a file in its directory +# (which is the current one) and add the checksum to its file (which is the +# current one). 'current_file' and 'current_dir' are not actual package fields, +# but we ignore these when we create the PackageData object. def F_directory_handler(value, **kwargs): return {'current_dir': value} -def R_filename_handler(value, current_dir, installed_files=None, **kwargs): +def R_filename_handler(value, current_dir, file_references=None, **kwargs): """ - Return a new current_file PackageFile in current_dir. Add to installed_files + Return a new current_file FileReference in current_dir. Add to the + ``file_references`` list (create it if not provided) + + Return a mapping of {'current_file': current_file, 'file_references': file_references} """ # operate on a copy for safety and create an empty list on first use - installed_files = installed_files[:] if installed_files else [] + file_references = file_references[:] if file_references else [] - current_file = models.PackageFile(path=posixpath.join(current_dir, value)) - installed_files.append(current_file) - return {'current_file': current_file, 'installed_files': installed_files} + current_file = models.FileReference(path=posixpath.join(current_dir, value)) + file_references.append(current_file.to_dict()) + return {'current_file': current_file, 'file_references': file_references} def Z_checksum_handler(value, current_file, **kwargs): """ - Update the current PackageFile with its updated SHA1 hex-encoded checksum. + Update the ``current_file`` FileReference with its updated SHA1 hex-encoded + checksum. + + Return a mapping of {'current_file': current_file} 'Z' is a file checksum (for files and links) For example: Z:Q1WTc55xfvPogzA0YUV24D0Ym+MKE= @@ -1025,7 +1131,6 @@ def get_source_entries(source): or:: source="lua-mqtt-publish-$pkgver.tar.gz::https://github.com/ncopa/lua-mqtt-publish/archive/v$pkgver.tar.gz" - """ schemes = 'https://', 'http://', 'ftp://', for entry in source.strip().splitlines(False): @@ -1073,6 +1178,7 @@ def source_handler(value, **kwargs): # 'pkgname' in .PKGINFO and APKBUILD 'P': build_name_value_str_handler('name'), 'pkgname': build_name_value_str_handler('name'), + # TODO: add subpackages # this can be composed of two or three segments: epoch:version-release # For example: V:1.31.1-r9 @@ -1084,10 +1190,12 @@ def source_handler(value, **kwargs): # 'pkgdesc' in .PKGINFO and APKBUILD 'T': build_name_value_str_handler('description'), 'pkgdesc': build_name_value_str_handler('description'), + # For example: U:https://busybox.net/ # 'url' in .PKGINFO and APKBUILD 'U': build_name_value_str_handler('homepage_url'), 'url': build_name_value_str_handler('homepage_url'), + # The license. For example: L:GPL2 # 'license' in .PKGINFO and APKBUILD 'L': L_license_handler, @@ -1096,7 +1204,7 @@ def source_handler(value, **kwargs): # For example: m:Natanael Copa # 'maintainer' in .PKGINFO and APKBUILD 'm': m_maintainer_handler, - # TODO: this is more often than a comment in the APKBUILD + # TODO: this is more often just a comment in the APKBUILD 'maintainer': m_maintainer_handler, # For example: A:x86_64 @@ -1190,10 +1298,13 @@ def source_handler(value, **kwargs): # - 'F': this is a folder path from the root and until there is a new F value # all files defined with an R are under that folder 'F': F_directory_handler, + # - 'Z' is a file checksum (for files and links) 'Z': Z_checksum_handler, + # - 'R': this is a file name that is under the current F Folder 'R': R_filename_handler, + # - 'M' is a set of permissions for a folder as user:group:mode e.g. M:0:0:1777 # - 'a' is a set of permissions for a file as user:group:mode e.g. a:0:0:755 ############################################################################ @@ -1258,8 +1369,10 @@ def normalize_and_cleanup_declared_license(declared): The expression should be valida SPDX but are far from this in practice. Several fixes are applied: + - plain text replacemnet aka. syntax fixes are plain text replacements to make the expression parsable + - common fixes includes also nadling space-separated and comma-separated lists of licenses """ @@ -1548,6 +1661,7 @@ def apkbuild_options_handler(value, **kwargs): ################################################# +# test code to test parse whole APKINDEX if __name__ == '__main__': import sys diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/bluedevil/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/bluedevil/APKBUILD-expected.json index 722d738ded6..52e01a2368b 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/bluedevil/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/bluedevil/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.0-plus AND (lgpl-2.1 OR lgpl-3.0)", "declared_license": "GPL-2.0-or-later AND LGPL-2.0-or-later AND (LGPL-2.1-only OR LGPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/bluedevil@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/bluedevil@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-grub/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-grub/APKBUILD-expected.json index 216b2e1c084..03643921f44 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-grub/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-grub/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/breeze-grub@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/breeze-grub@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-gtk/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-gtk/APKBUILD-expected.json index 7418d9b27a5..29920081392 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-gtk/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-gtk/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1", "declared_license": "LGPL-2.1-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/breeze-gtk@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/breeze-gtk@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-plymouth/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-plymouth/APKBUILD-expected.json index fb94a7dccf0..e32d3fff468 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-plymouth/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze-plymouth/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/breeze-plymouth@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/breeze-plymouth@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze/APKBUILD-expected.json index 71b069f06ae..aa3ae3c12fc 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/breeze/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/breeze@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/breeze@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/discover/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/discover/APKBUILD-expected.json index d71a46803ec..5663b77cdaa 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/discover/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/discover/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.0-plus AND (gpl-2.0 OR gpl-3.0) AND gfdl-1.2", "declared_license": "LGPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND GFDL-1.2-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/discover@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/discover@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/drkonqi/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/drkonqi/APKBUILD-expected.json index 9cd2838ca9b..d55363707e3 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/drkonqi/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/drkonqi/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/drkonqi@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/drkonqi@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-lts/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-lts/APKBUILD-expected.json index d06d77ce61e..f94367aa5fa 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-lts/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-lts/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/jool-modules-lts@5.10.43-r%24%28%28", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/jool-modules-lts@5.10.43-r%24%28%28" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-rpi/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-rpi/APKBUILD-expected.json index d06d77ce61e..f94367aa5fa 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-rpi/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/jool-modules-rpi/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/jool-modules-lts@5.10.43-r%24%28%28", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/jool-modules-lts@5.10.43-r%24%28%28" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kactivitymanagerd/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kactivitymanagerd/APKBUILD-expected.json index 3fbde37f971..3b2438eb1f8 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kactivitymanagerd/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kactivitymanagerd/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0 OR gpl-3.0", "declared_license": "GPL-2.0-only OR GPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kactivitymanagerd@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kactivitymanagerd@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-cli-tools/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-cli-tools/APKBUILD-expected.json index 44249e56ad3..31cc0911475 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-cli-tools/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-cli-tools/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(gpl-2.0 OR gpl-3.0) AND gpl-2.0-plus AND gpl-2.0 AND lgpl-2.1", "declared_license": "(GPL-2.0-only OR GPL-3.0-only) AND GPL-2.0-or-later AND GPL-2.0-only AND LGPL-2.1-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kde-cli-tools@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kde-cli-tools@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-gtk-config/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-gtk-config/APKBUILD-expected.json index 57c3c107ce6..88908732306 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-gtk-config/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kde-gtk-config/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(gpl-2.0 AND lgpl-2.1) OR lgpl-3.0", "declared_license": "GPL-2.0 AND LGPL-2.1-only OR LGPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kde-gtk-config@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kde-gtk-config@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdecoration/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdecoration/APKBUILD-expected.json index b361b349d83..816757dbf6e 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdecoration/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdecoration/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1 OR lgpl-3.0", "declared_license": "LGPL-2.1-only OR LGPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kdecoration@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kdecoration@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdeplasma-addons/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdeplasma-addons/APKBUILD-expected.json index 0c56dd4d007..bf51fe706d7 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdeplasma-addons/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kdeplasma-addons/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.0 AND gpl-2.0-plus", "declared_license": "LGPL-2.0-only AND GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kdeplasma-addons@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kdeplasma-addons@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kgamma5/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kgamma5/APKBUILD-expected.json index 11c9b32ff15..fdf88aa0f3d 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kgamma5/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kgamma5/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kgamma5@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kgamma5@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/khotkeys/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/khotkeys/APKBUILD-expected.json index 7e8e3456208..7fbb44fdda5 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/khotkeys/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/khotkeys/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0 AND lgpl-2.0-plus", "declared_license": "GPL-2.0-only AND LGPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/khotkeys@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/khotkeys@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kinfocenter/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kinfocenter/APKBUILD-expected.json index 256258e25e4..68f624676ca 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kinfocenter/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kinfocenter/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(gpl-2.0 OR gpl-3.0) AND (lgpl-2.1 OR lgpl-3.0)", "declared_license": "(GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kinfocenter@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kinfocenter@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kmenuedit/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kmenuedit/APKBUILD-expected.json index 5bfa04986ee..8d751df283c 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kmenuedit/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kmenuedit/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kmenuedit@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kmenuedit@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreen/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreen/APKBUILD-expected.json index 305fef8550f..5cb3a7e8d2c 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreen/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreen/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.1-plus", "declared_license": "GPL-2.0-or-later AND LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kscreen@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kscreen@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreenlocker/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreenlocker/APKBUILD-expected.json index 1a082f3053a..f30d395b092 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreenlocker/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kscreenlocker/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0)", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kscreenlocker@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kscreenlocker@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ksshaskpass/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ksshaskpass/APKBUILD-expected.json index 24678912a17..f17f847458e 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ksshaskpass/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ksshaskpass/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/ksshaskpass@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/ksshaskpass@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwallet-pam/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwallet-pam/APKBUILD-expected.json index aec419f2452..aeefb0e7611 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwallet-pam/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwallet-pam/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1-plus", "declared_license": "LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kwallet-pam@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kwallet-pam@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-integration/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-integration/APKBUILD-expected.json index 6d0072f0a09..7850fc0b3cc 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-integration/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-integration/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1 OR lgpl-3.0", "declared_license": "LGPL-2.1-only OR LGPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kwayland-integration@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kwayland-integration@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-server/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-server/APKBUILD-expected.json index 3194c7be413..84841811476 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-server/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwayland-server/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0) AND lgpl-2.1", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND LGPL-2.1-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kwayland-server@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kwayland-server@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwin/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwin/APKBUILD-expected.json index 2f754a8593b..2bd02b0c180 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwin/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwin/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0) AND lgpl-2.1", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND LGPL-2.1-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kwin@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kwin@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwrited/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwrited/APKBUILD-expected.json index 6d1347a5cd6..89c24dcbb87 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwrited/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/kwrited/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kwrited@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kwrited@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/layer-shell-qt/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/layer-shell-qt/APKBUILD-expected.json index 4a5ef896216..3913cee13b6 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/layer-shell-qt/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/layer-shell-qt/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0)", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/layer-shell-qt@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/layer-shell-qt@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libkscreen/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libkscreen/APKBUILD-expected.json index affb9734db5..bd73b3dfdf3 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libkscreen/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libkscreen/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1-plus AND gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0)", "declared_license": "LGPL-2.1-or-later AND GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/libkscreen@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/libkscreen@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libksysguard/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libksysguard/APKBUILD-expected.json index 04adaf5ff95..86516db6cb2 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libksysguard/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libksysguard/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1-plus AND (gpl-2.0 OR gpl-3.0)", "declared_license": "LGPL-2.1-or-later AND (GPL-2.0-only OR GPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/libksysguard@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/libksysguard@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libreoffice/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libreoffice/APKBUILD-expected.json index a5a564855b9..e4c108b1bf4 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libreoffice/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/libreoffice/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "mpl-2.0", "declared_license": "MPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -273,8 +273,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/libreoffice@6.4.6.2-r11", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/libreoffice@6.4.6.2-r11" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/milou/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/milou/APKBUILD-expected.json index 4c8280d3e05..62686925536 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/milou/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/milou/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0) AND (lgpl-2.1 OR lgpl-3.0)", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/milou@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/milou@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/mpd/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/mpd/APKBUILD-expected.json index c4e3e5f6ff7..762942e5aec 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/mpd/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/mpd/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -89,8 +89,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/mpd@0.22.8-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/mpd@0.22.8-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/oxygen/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/oxygen/APKBUILD-expected.json index b4e3fc97950..78c8a1da341 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/oxygen/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/oxygen/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1-plus", "declared_license": "LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/oxygen@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/oxygen@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/parole/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/parole/APKBUILD-expected.json index 22fdf347c12..12ec9fd0c29 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/parole/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/parole/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/parole@1.0.5-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/parole@1.0.5-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-browser-integration/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-browser-integration/APKBUILD-expected.json index 82088285a43..df8aeebcbda 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-browser-integration/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-browser-integration/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-browser-integration@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-browser-integration@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-desktop/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-desktop/APKBUILD-expected.json index 0c96a710f91..629f49a3d35 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-desktop/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-desktop/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0 AND lgpl-2.1", "declared_license": "GPL-2.0-only AND LGPL-2.1-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-desktop@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-desktop@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-disks/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-disks/APKBUILD-expected.json index 7a58cf96313..c1ff6898da9 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-disks/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-disks/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-disks@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-disks@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-firewall/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-firewall/APKBUILD-expected.json index 9dcac0785ce..65e065e36d5 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-firewall/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-firewall/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-firewall@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-firewall@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-integration/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-integration/APKBUILD-expected.json index 12f47cb7106..6fd0e47b601 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-integration/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-integration/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(lgpl-2.1 OR lgpl-3.0) AND lgpl-2.1 AND (lgpl-2.1 WITH qt-lgpl-exception-1.1 OR gpl-3.0 WITH qt-lgpl-exception-1.1)", "declared_license": "(LGPL-2.1-only OR LGPL-3.0-only) AND LGPL-2.1-only AND ((LGPL-2.1-only WITH Nokia-Qt-exception-1.1) OR (GPL-3.0-only WITH Nokia-Qt-exception-1.1))", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-integration@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-integration@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nano/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nano/APKBUILD-expected.json index 36590db41fe..eacdbc24dc9 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nano/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nano/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.1-plus", "declared_license": "GPL-2.0-or-later AND LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-nano@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-nano@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nm/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nm/APKBUILD-expected.json index 654d13b6a03..9a3ea5adaab 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nm/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-nm/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(lgpl-2.1 OR lgpl-3.0) AND lgpl-2.0-plus", "declared_license": "(LGPL-2.1-only OR LGPL-3.0-only) AND LGPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-nm@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-nm@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-pa/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-pa/APKBUILD-expected.json index 6f319311141..5eed80348fa 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-pa/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-pa/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1 OR (lgpl-3.0 AND gpl-2.0)", "declared_license": "LGPL-2.1-only OR LGPL-3.0-only AND GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-pa@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-pa@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-phone-components/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-phone-components/APKBUILD-expected.json index 9c4f8e31249..a04c1b11217 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-phone-components/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-phone-components/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.1-plus", "declared_license": "GPL-2.0-or-later AND LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-phone-components@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-phone-components@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-sdk/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-sdk/APKBUILD-expected.json index 8d88ddecd86..04f0b373b38 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-sdk/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-sdk/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-sdk@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-sdk@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-systemmonitor/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-systemmonitor/APKBUILD-expected.json index 3a6a7324636..66a1865feae 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-systemmonitor/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-systemmonitor/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "kde-accepted-gpl AND kde-accepted-lgpl AND cc0-1.0", "declared_license": "LicenseRef-KDE-Accepted-GPL AND LicenseRef-KDE-Accepted-LGPL AND CC0-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-systemmonitor@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-systemmonitor@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-thunderbolt/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-thunderbolt/APKBUILD-expected.json index ee11f9a4faf..126ceb8dc1a 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-thunderbolt/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-thunderbolt/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0 OR gpl-3.0", "declared_license": "GPL-2.0-only OR GPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-thunderbolt@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-thunderbolt@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-vault/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-vault/APKBUILD-expected.json index c096f02a53c..7ae9e642c6e 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-vault/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-vault/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(gpl-2.0 OR gpl-3.0) AND (lgpl-2.1 AND lgpl-3.0)", "declared_license": "(GPL-2.0-only OR GPL-3.0-only) AND (LGPL-2.1-only AND LGPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-vault@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-vault@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace-wallpapers/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace-wallpapers/APKBUILD-expected.json index 2dc7714b516..5608613e7e0 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace-wallpapers/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace-wallpapers/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-workspace-wallpapers@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-workspace-wallpapers@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace/APKBUILD-expected.json index d8dc832f920..95d1a3c0a30 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plasma-workspace/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "(gpl-2.0 OR gpl-3.0) AND lgpl-2.1-plus AND gpl-2.0-plus AND mit AND lgpl-2.1 AND lgpl-2.0-plus AND (lgpl-2.1 OR lgpl-3.0) AND lgpl-2.0", "declared_license": "(GPL-2.0-only OR GPL-3.0-only) AND LGPL-2.1-or-later AND GPL-2.0-or-later AND MIT AND LGPL-2.1-only AND LGPL-2.0-or-later AND (LGPL-2.1-only OR LGPL-3.0-only) AND LGPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plasma-workspace@5.22.0-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plasma-workspace@5.22.0-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plymouth-kcm/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plymouth-kcm/APKBUILD-expected.json index 6a151e3ae75..1df4dcaac3d 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plymouth-kcm/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/plymouth-kcm/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/plymouth-kcm@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/plymouth-kcm@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/polkit-kde-agent-1/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/polkit-kde-agent-1/APKBUILD-expected.json index 84b6bc4793f..6db1170a999 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/polkit-kde-agent-1/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/polkit-kde-agent-1/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/polkit-kde-agent-1@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/polkit-kde-agent-1@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/powerdevil/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/powerdevil/APKBUILD-expected.json index 4d69c8cf4d9..a4558f0f047 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/powerdevil/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/powerdevil/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.0-plus AND (lgpl-2.1 OR lgpl-3.0)", "declared_license": "GPL-2.0-or-later AND LGPL-2.0-or-later AND (LGPL-2.1-only OR LGPL-3.0-only)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/powerdevil@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/powerdevil@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qqc2-breeze-style/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qqc2-breeze-style/APKBUILD-expected.json index d955b7e8934..c97e5e740c5 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qqc2-breeze-style/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qqc2-breeze-style/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "kde-accepted-lgpl AND kfqf-accepted-gpl", "declared_license": "LicenseRef-KDE-Accepted-LGPL AND LicenseRef-KFQF-Accepted-GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/qqc2-breeze-style@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/qqc2-breeze-style@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qt6-qtbase/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qt6-qtbase/APKBUILD-expected.json index b0b2b2982c5..9de469add5f 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qt6-qtbase/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/qt6-qtbase/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1 AND lgpl-3.0 AND gpl-3.0 AND qt-gpl-exception-1.0", "declared_license": "LGPL-2.1-only AND LGPL-3.0-only AND GPL-3.0-only AND Qt-GPL-exception-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/qt6-qtbase@6.1.1-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/qt6-qtbase@6.1.1-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/rtpengine-lts/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/rtpengine-lts/APKBUILD-expected.json index 2883ccd3d6a..e0ea39a5d2d 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/rtpengine-lts/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/rtpengine-lts/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0", "declared_license": "GPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/rtpengine-lts@5.10.43-r%24%28%280", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/rtpengine-lts@5.10.43-r%24%28%280" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/sddm-kcm/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/sddm-kcm/APKBUILD-expected.json index f5b1af35376..5ba83ac38cd 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/sddm-kcm/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/sddm-kcm/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND (gpl-2.0 OR gpl-3.0) AND lgpl-2.1-plus AND gpl-2.0", "declared_license": "GPL-2.0-or-later AND (GPL-2.0-only OR GPL-3.0-only) AND LGPL-2.1-or-later AND GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/sddm-kcm@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/sddm-kcm@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/systemsettings/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/systemsettings/APKBUILD-expected.json index 89655eca8d2..7231122f224 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/systemsettings/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/systemsettings/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/systemsettings@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/systemsettings@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ufw/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ufw/APKBUILD-expected.json index 08e0447cbe3..28da59752f1 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ufw/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/ufw/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/ufw@0.36-r4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/ufw@0.36-r4" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/xdg-desktop-portal-kde/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/xdg-desktop-portal-kde/APKBUILD-expected.json index 66d176693dd..94647f1299c 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/xdg-desktop-portal-kde/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/community/xdg-desktop-portal-kde/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.0-plus", "declared_license": "LGPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/xdg-desktop-portal-kde@5.22.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/xdg-desktop-portal-kde@5.22.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/cmake/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/cmake/APKBUILD-expected.json index f1f18381bca..14e131b456c 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/cmake/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/cmake/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-new", "declared_license": "BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/cmake@3.20.3-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/cmake@3.20.3-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/kamailio/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/kamailio/APKBUILD-expected.json index 83482267bb9..922d9f15239 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/kamailio/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/kamailio/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/kamailio@5.4.5-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/kamailio@5.4.5-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/libburn/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/libburn/APKBUILD-expected.json index 5a51786b128..950902cab92 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/libburn/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/libburn/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/libburn@1.5.4-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/libburn@1.5.4-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-lts/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-lts/APKBUILD-expected.json index d73ff431787..3dea64ee5d4 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-lts/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-lts/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -173,8 +173,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-lts@5.10.43-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-lts@5.10.43-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-rpi/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-rpi/APKBUILD-expected.json index d30cee2dab9..bf6e1f2c978 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-rpi/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/linux-rpi/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -113,8 +113,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-rpi@5.10.43-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-rpi@5.10.43-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/lua-unit/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/lua-unit/APKBUILD-expected.json index 10c2b77c02a..5f538656899 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/lua-unit/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/lua-unit/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-simplified", "declared_license": "BSD-2-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/lua-unit@3.3-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/lua-unit@3.3-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite-tcl/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite-tcl/APKBUILD-expected.json index 77ec55a67a6..75eea7f8e28 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite-tcl/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite-tcl/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "public-domain", "declared_license": "Public-Domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/sqlite-tcl@3.35.5-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/sqlite-tcl@3.35.5-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite/APKBUILD-expected.json index 634573312fb..09b75b5422c 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqlite/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "public-domain", "declared_license": "Public-Domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/sqlite@3.35.5-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/sqlite@3.35.5-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqsh/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqsh/APKBUILD-expected.json index 76ebf8e3c16..6e1425f1bcf 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqsh/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sqsh/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/sqsh@2.5.16.1-r4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/sqsh@2.5.16.1-r4" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sudo/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sudo/APKBUILD-expected.json index cea2a086366..39dde253556 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sudo/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/sudo/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "unknown-license-reference AND isc", "declared_license": "custom ISC", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/sudo@1.9.6_p1-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/sudo@1.9.6_p1-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/util-linux/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/util-linux/APKBUILD-expected.json index 3aa9f459f5d..29ef4867e96 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/util-linux/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/main/util-linux/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus AND gpl-2.0-plus AND gpl-2.0 AND lgpl-2.1-plus AND bsd-new AND bsd-original-uc AND public-domain", "declared_license": "GPL-3.0-or-later AND GPL-2.0-or-later AND GPL-2.0-only AND\n\tLGPL-2.1-or-later AND BSD-3-Clause AND BSD-4-Clause-UC AND Public-Domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/util-linux@2.37-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/util-linux@2.37-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-edge/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-edge/APKBUILD-expected.json index e75d6c23382..fd2dea47efd 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-edge/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-edge/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -69,8 +69,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-edge@5.12.10-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-edge@5.12.10-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-elm/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-elm/APKBUILD-expected.json index 78b1733f628..8afa527234e 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-elm/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-elm/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-elm@5.12.10-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-elm@5.12.10-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-gru/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-gru/APKBUILD-expected.json index 4bde6be85ee..b9c68024533 100644 --- a/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-gru/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild-problems/alpine14/testing/linux-gru/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -61,8 +61,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-gru@5.12.10-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-gru@5.12.10-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/abook/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/abook/APKBUILD-expected.json index 62aaa698189..628dfbb04ce 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/abook/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/abook/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/abook@0.6.1-r5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/abook@0.6.1-r5" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/darktable/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/darktable/APKBUILD-expected.json index e43f8f67c22..14c182ec776 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/darktable/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/darktable/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/darktable@3.4.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/darktable@3.4.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/haxe/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/haxe/APKBUILD-expected.json index f631ec1f768..05cedbf0cf7 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine13/community/haxe/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine13/community/haxe/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus AND mit AND lgpl-2.0-plus", "declared_license": "GPL MIT LGPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/haxe@3.4.7-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/haxe@3.4.7-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine13/main/linux-firmware/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine13/main/linux-firmware/APKBUILD-expected.json index 5651ed0a683..73b05e31b0d 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine13/main/linux-firmware/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine13/main/linux-firmware/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "unknown-license-reference", "declared_license": "custom:multiple", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-firmware@20201218-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-firmware@20201218-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/2bwm/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/2bwm/APKBUILD-expected.json index 8b2fad4b0f0..3ed8d969548 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/2bwm/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/2bwm/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "isc", "declared_license": "ISC", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/2bwm@0.3-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/2bwm@0.3-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/acccheck/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/acccheck/APKBUILD-expected.json index 4fde3340326..be1f1be3f52 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/acccheck/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/acccheck/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/acccheck@0.2.1-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/acccheck@0.2.1-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/accerciser/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/accerciser/APKBUILD-expected.json index d5714ce67f8..90f8e98e857 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/accerciser/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/accerciser/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-new", "declared_license": "BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/accerciser@3.38.0-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/accerciser@3.38.0-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/alpine/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/alpine/APKBUILD-expected.json index b29e966d6d2..2c89e8fd8d4 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/alpine/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/alpine/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "apache-2.0", "declared_license": "Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/alpine@2.24-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/alpine@2.24-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/audacious-plugins/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/audacious-plugins/APKBUILD-expected.json index 2087fd054d8..781e901f975 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/audacious-plugins/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/audacious-plugins/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-simplified AND bsd-new AND isc AND gpl-2.0 AND gpl-2.0-plus AND gpl-3.0 AND gpl-3.0-plus", "declared_license": "BSD-2-Clause AND BSD-3-Clause AND ISC AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-only AND GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/audacious-plugins@4.0.5-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/audacious-plugins@4.0.5-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/boost-build/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/boost-build/APKBUILD-expected.json index f9c94fb10c7..7c056ec7499 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/boost-build/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/boost-build/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "boost-1.0", "declared_license": "BSL-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/boost-build@1.76.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/boost-build@1.76.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/dircproxy/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/dircproxy/APKBUILD-expected.json index a4855008bcc..ce382fc0c02 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/dircproxy/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/dircproxy/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -73,8 +73,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/dircproxy@1.2.0_rc-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/dircproxy@1.2.0_rc-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/faac/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/faac/APKBUILD-expected.json index 6c9b32c68ee..191343b7207 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/faac/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/faac/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/faac@1.30-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/faac@1.30-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/feedbackd-device-themes/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/feedbackd-device-themes/APKBUILD-expected.json index 9b1327207ff..00e8580c250 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/feedbackd-device-themes/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/feedbackd-device-themes/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0-plus", "declared_license": "GPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/feedbackd-device-themes@0_git20210126-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/feedbackd-device-themes@0_git20210126-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/gcc6/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/gcc6/APKBUILD-expected.json index 03eecc78deb..b9aacd7d3f3 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/gcc6/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/gcc6/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus AND lgpl-2.0-plus", "declared_license": "GPL LGPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -353,8 +353,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/gcc6@6.4.0-r12", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/gcc6@6.4.0-r12" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/hunspell-de-de/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/hunspell-de-de/APKBUILD-expected.json index e2dfb6a5a7e..4460c36f48f 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/hunspell-de-de/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/hunspell-de-de/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-3.0", "declared_license": "GPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/hunspell-de-de@20170112-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/hunspell-de-de@20170112-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick/APKBUILD-expected.json index adcad0fe12f..d764c8cfb12 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "imagemagick", "declared_license": "ImageMagick", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/imagemagick@7.0.11.13-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/imagemagick@7.0.11.13-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick6/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick6/APKBUILD-expected.json index d278cc7379a..3a5bf2a2de7 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick6/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/imagemagick6/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "apache-2.0", "declared_license": "Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/imagemagick6@6.9.11.55-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/imagemagick6@6.9.11.55-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/libluv/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/libluv/APKBUILD-expected.json index 90d51f3c718..88b0af2b55a 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/libluv/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/libluv/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "apache-2.0", "declared_license": "Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/libluv@1.36.0.0-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/libluv@1.36.0.0-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/nymphcast-client/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/nymphcast-client/APKBUILD-expected.json index e3b0180cb7e..def39482271 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/nymphcast-client/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/nymphcast-client/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-new", "declared_license": "BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/nymphcast-client@0.1_alpha4-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/nymphcast-client@0.1_alpha4-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/openjdk10/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/openjdk10/APKBUILD-expected.json index 9a954a2acaa..61d71e96fc5 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/openjdk10/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/openjdk10/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "classpath-exception-2.0", "declared_license": "GPL-2.0-with-classpath-exception", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -137,8 +137,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/openjdk10@10.0.2_p13-r3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/openjdk10@10.0.2_p13-r3" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/py3-cairosvg/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/py3-cairosvg/APKBUILD-expected.json index e025cd96621..f99a6dfcc98 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/py3-cairosvg/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/py3-cairosvg/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-3.0-plus", "declared_license": "LGPL-3.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/py3-cairosvg@2.5.2-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/py3-cairosvg@2.5.2-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/qt6-qt3d/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/qt6-qt3d/APKBUILD-expected.json index 15df6da3934..62b9f8ed02e 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/qt6-qt3d/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/qt6-qt3d/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1 AND lgpl-3.0 AND gpl-3.0 AND qt-gpl-exception-1.0", "declared_license": "LGPL-2.1-only AND LGPL-3.0-only AND GPL-3.0-only AND Qt-GPL-exception-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/qt6-qt3d@6.1.1-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/qt6-qt3d@6.1.1-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/ruby-rspec/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/ruby-rspec/APKBUILD-expected.json index 792925386a7..6fa74c62d02 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/ruby-rspec/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/ruby-rspec/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -49,8 +49,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/ruby-rspec@3.10.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/ruby-rspec@3.10.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/unicode-character-database/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/unicode-character-database/APKBUILD-expected.json index 1c5dbbaaa38..c52da9bde94 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/unicode-character-database/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/unicode-character-database/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "unicode-dfs-2015", "declared_license": "Unicode-DFS-2015", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -73,8 +73,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/unicode-character-database@13.0.0-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/unicode-character-database@13.0.0-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/vtk/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/vtk/APKBUILD-expected.json index 0a09b155697..c7dd2ce356c 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/vtk/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/vtk/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-new", "declared_license": "BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -65,8 +65,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/vtk@9.0.1-r5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/vtk@9.0.1-r5" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/zsnes/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/zsnes/APKBUILD-expected.json index 75bc4b028fb..99e1a4c729d 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/community/zsnes/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/community/zsnes/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -97,8 +97,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/zsnes@1.51-r11", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/zsnes@1.51-r11" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/gcc/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/gcc/APKBUILD-expected.json index c9077904205..fa7d5dbe409 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/gcc/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/gcc/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0-plus AND lgpl-2.1-plus", "declared_license": "GPL-2.0-or-later LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -369,8 +369,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/gcc@10.3.1_git20210424-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/gcc@10.3.1_git20210424-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/icu/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/icu/APKBUILD-expected.json index 4c1202853ee..f8e57ababac 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/icu/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/icu/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "mit AND x11 AND unicode-tou", "declared_license": "MIT ICU Unicode-TOU", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/icu@67.1-r2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/icu@67.1-r2" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/ruby/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/ruby/APKBUILD-expected.json index d3abd64304b..52d2b53490b 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/main/ruby/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/main/ruby/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "ruby AND bsd-simplified AND mit", "declared_license": "Ruby AND BSD-2-Clause AND MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -73,8 +73,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/ruby@2.7.3-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/ruby@2.7.3-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-dcontainers/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-dcontainers/APKBUILD-expected.json index 715040768d4..977f95a8d0c 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-dcontainers/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-dcontainers/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "boost-1.0", "declared_license": "BSL-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/dcontainers@0.8.0_alpha19-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/dcontainers@0.8.0_alpha19-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-linux-firmware/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-linux-firmware/APKBUILD-expected.json index 0d6b339b307..11db484c683 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-linux-firmware/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-linux-firmware/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "unknown-license-reference", "declared_license": "custom:multiple", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -73,8 +73,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/linux-firmware@20210511-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/linux-firmware@20210511-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-lua-lustache/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-lua-lustache/APKBUILD-expected.json index 416dd0a599b..bac21c51226 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-lua-lustache/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-lua-lustache/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/lua-lustache@1.3.1-r3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/lua-lustache@1.3.1-r3" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-perl-socket-getaddrinfo/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-perl-socket-getaddrinfo/APKBUILD-expected.json index 692b6b6e267..9c86c314c67 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-perl-socket-getaddrinfo/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-perl-socket-getaddrinfo/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus OR artistic-perl-1.0", "declared_license": "GPL-1.0-or-later OR Artistic-1.0-Perl", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/perl-socket-getaddrinfo@0.22-r3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/perl-socket-getaddrinfo@0.22-r3" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-stdx-allocator/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-stdx-allocator/APKBUILD-expected.json index 9429ff13f07..ae241e73060 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-stdx-allocator/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand-stdx-allocator/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "boost-1.0", "declared_license": "BSL-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/stdx-allocator@3.1.0_beta2-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/stdx-allocator@3.1.0_beta2-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand_in_python-py3-cssselect2/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand_in_python-py3-cssselect2/APKBUILD-expected.json index 45161f626a3..41d2791d558 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand_in_python-py3-cssselect2/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/problems/nested_expand_in_python-py3-cssselect2/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "bsd-new", "declared_license": "BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/py3-cssselect2@0.4.1-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/py3-cssselect2@0.4.1-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gitlab-release-cli/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gitlab-release-cli/APKBUILD-expected.json index 011be66dd57..468df45affc 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gitlab-release-cli/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gitlab-release-cli/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/gitlab-release-cli@0.3.0-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/gitlab-release-cli@0.3.0-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gtksourceviewmm3/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gtksourceviewmm3/APKBUILD-expected.json index 611719df49d..f88c873fb41 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gtksourceviewmm3/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/gtksourceviewmm3/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "lgpl-2.1-plus", "declared_license": "LGPL-2.1-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/gtksourceviewmm3@3.21.3-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/gtksourceviewmm3@3.21.3-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/pnmixer/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/pnmixer/APKBUILD-expected.json index 959921e8333..de649a69e52 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/pnmixer/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/pnmixer/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/pnmixer@0.7.2-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/pnmixer@0.7.2-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/ubuntu-archive-keyring/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/ubuntu-archive-keyring/APKBUILD-expected.json index ce7bad7c9b7..730f122c41e 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/ubuntu-archive-keyring/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/testing/ubuntu-archive-keyring/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -41,8 +41,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/ubuntu-archive-keyring@2016.05.13.1-r1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/ubuntu-archive-keyring@2016.05.13.1-r1" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/apkbuild/alpine14/unmaintained/buildbot/APKBUILD-expected.json b/tests/packagedcode/data/alpine/apkbuild/alpine14/unmaintained/buildbot/APKBUILD-expected.json index 1c8cae91c04..78de8d90b20 100644 --- a/tests/packagedcode/data/alpine/apkbuild/alpine14/unmaintained/buildbot/APKBUILD-expected.json +++ b/tests/packagedcode/data/alpine/apkbuild/alpine14/unmaintained/buildbot/APKBUILD-expected.json @@ -24,8 +24,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "sources": [ { @@ -57,8 +57,9 @@ ] }, "dependencies": [], - "purl": "pkg:alpine/buildbot@1.6.0-r0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "alpine_apkbuild", + "purl": "pkg:alpine/buildbot@1.6.0-r0" } \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/full-installed/installed-expected.json b/tests/packagedcode/data/alpine/full-installed/installed-expected.json index 6777753262e..3458e924c75 100644 --- a/tests/packagedcode/data/alpine/full-installed/installed-expected.json +++ b/tests/packagedcode/data/alpine/full-installed/installed-expected.json @@ -35,34 +35,36 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/musl@1.1.24-r8" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/musl@1.1.24-r8?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/ld-musl-x86_64.so.1", "size": 0, - "sha1": "f1145b73e06675918af4a9dbad376aac37bdcef5", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/libc.musl-x86_64.so.1", "size": 0, - "sha1": "ef2277245372a40e26c61249af4a2ee82cec2552", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/musl@1.1.24-r8?arch=x86_64" }, { "type": "alpine", @@ -100,74 +102,81 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/busybox@1.31.1-r16" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/busybox@1.31.1-r16?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "bin/busybox", "size": 0, - "sha1": "c8813c5dfb67505c01515a074b9f1a9e967d7a72", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "bin/sh", "size": 0, - "sha1": "a5c7d37c33446cd290736b35b626bb75ad3933c4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/securetty", "size": 0, - "sha1": "e150ec86058595eb836e9e23a9793e50d112eb94", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/udhcpd.conf", "size": 0, - "sha1": "50088f65c0c85b50a5473a1b7e081c090efb576f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/logrotate.d/acpid", "size": 0, - "sha1": "4f29720883559a74be03f4de69de2f66113b064b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/network/if-up.d/dad", "size": 0, - "sha1": "865c5ddea131ae2847f1b6310d0de2ed3b0cff8e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/udhcpc/default.script", "size": 0, - "sha1": "9c33c0dc1c78cd2452bc3397f14dd6366610ff81", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/busybox@1.31.1-r16?arch=x86_64" }, { "type": "alpine", @@ -205,234 +214,261 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/alpine-baselayout@3.2.0-r6" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/alpine-baselayout@3.2.0-r6?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/fstab", "size": 0, - "sha1": "d50ee135ef10a434b9df582ea8276b5c1ce803fa", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/group", "size": 0, - "sha1": "a09d7ac56b9d80a3ab5c812ab840f3945d8bb26e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/hostname", "size": 0, - "sha1": "ea75706155cffed0a1bd43ddba4543da27d73a67", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/hosts", "size": 0, - "sha1": "043eb324a653456caa1a73e2e2d49f77792bb0c5", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/inittab", "size": 0, - "sha1": "4ecb616e15bb4335917b513f34ac133ae0f8a477", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modules", "size": 0, - "sha1": "b68a208d48a91c670c8040a03c95fae12c144f53", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/motd", "size": 0, - "sha1": "5e676e555354447436ed3bd8a752ebe5332d15c0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/mtab", "size": 0, - "sha1": "9229638575c7d4b950ae81ec1092243d98367a2c", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/passwd", "size": 0, - "sha1": "4dc86eb8b51fbabd22cef7d9419c6037f2c9841f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile", "size": 0, - "sha1": "2a915bf249792efc175a56377b9f0536c8eb237e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/protocols", "size": 0, - "sha1": "dc5a97527bee3a9303ac7ffaade871b98004137e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/services", "size": 0, - "sha1": "0ba1c936042f2d6aade5563e9fb319275aec0ee6", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/shadow", "size": 0, - "sha1": "96dacf2005b6cc778389a8ec7b1d81766ab7baa0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/shells", "size": 0, - "sha1": "a239b661da4227a07f6a9183699fd275bdb12640", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/sysctl.conf", "size": 0, - "sha1": "e2ea73ded7e7371664204b148569fb5e88b0f7a8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/crontabs/root", "size": 0, - "sha1": "bdf9356a9516238c8b2468613517749098b17ef6", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/aliases.conf", "size": 0, - "sha1": "5946e1e930583552bb7b863eb94bcbb3feef8aa9", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/blacklist.conf", "size": 0, - "sha1": "c7160653a4ba4cb42f6fb7abbcfad65b0016a8c8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/i386.conf", "size": 0, - "sha1": "a676b2fe78e7ea897d702b2c2fb2a2659f1eb657", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/kms.conf", "size": 0, - "sha1": "ca76cb9f71980e9bda8db6bf95da759e26b27a88", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile.d/color_prompt", "size": 0, - "sha1": "d302f6dc6b920957ee98c4606a469b508e84b129", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile.d/locale", "size": 0, - "sha1": "4786c81299cac71392ae59d9cbd0286b0a99e435", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/sysctl.d/00-alpine.conf", "size": 0, - "sha1": "1e9125cd6d7112098a7c446d4f2ee8a269a7aba7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "sbin/mkmntdirs", "size": 0, - "sha1": "61eb92982ee20db116aeeb0fcc0ff351017a6128", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/run", "size": 0, - "sha1": "d7f48d673ffc70ad9d48a2be709a55ad922e1784", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/spool/mail", "size": 0, - "sha1": "7736dd6b36190369d3cd2206dd8c8dc3b77826e7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/spool/cron/crontabs", "size": 0, - "sha1": "38566df99329ee3d069f2d2ba922ae589caa6260", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/alpine-baselayout@3.2.0-r6?arch=x86_64" }, { "type": "alpine", @@ -470,178 +506,198 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/alpine-keys@2.2-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/alpine-keys@2.2-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "3af08548ef78cfdedcf349880c2c6a1a48763a0e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "bfb616658cc05a872568b0c8e398c482e23b60dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "3671ae0ec7503b1e193587c1dcdf7b78bc863e42", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "3af08548ef78cfdedcf349880c2c6a1a48763a0e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "bfb616658cc05a872568b0c8e398c482e23b60dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", "size": 0, - "sha1": "053a92f87fd4532850bb31f0881978efe0532ae5", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "3671ae0ec7503b1e193587c1dcdf7b78bc863e42", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", "size": 0, - "sha1": "39ac5d72c6ba018a0f74b8b453894edc9db07b5f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", "size": 0, - "sha1": "c8fabeb2eeb992c368c77b9707e0d1ecfd7cf905", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", "size": 0, - "sha1": "329643357d0b78b1ef48ec155325e25f1d7534dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", "size": 0, - "sha1": "825090fde25bbc0e71a9cb3076316b5afe459e4d", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", "size": 0, - "sha1": "ee3f67589910fb07c8b95433205ae6159edf48e7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", "size": 0, - "sha1": "53d42db1d37ead867d661efa11f5f2d342591cc8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/mips64/alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub", "size": 0, - "sha1": "84265d171f8bbf36cbb4fb3be778deefc8041014", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", "size": 0, - "sha1": "b76d5d8422db4c99801d748278e32aff6bdf4a0a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", "size": 0, - "sha1": "b236d5dabdb0d08876bf07730b826ae9423b70c4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "222e758bb36b738b9fb75e0786aba0694a9d1fae", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "638f5e571869bdfb5b437c8076f94b7dcacf2d35", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "222e758bb36b738b9fb75e0786aba0694a9d1fae", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "014158f9fc1205372b61eb634fb347bda7eb4907", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/alpine-keys@2.2-r0?arch=x86_64" }, { "type": "alpine", @@ -679,114 +735,126 @@ "license_expression": "openssl-ssleay", "declared_license": "OpenSSL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/openssl@1.1.1g-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/libcrypto1.1@1.1.1g-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/ssl/ct_log_list.cnf", "size": 0, - "sha1": "a2587c4e97408b64274e5e052b74e3754892c13a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/ct_log_list.cnf.dist", "size": 0, - "sha1": "a2587c4e97408b64274e5e052b74e3754892c13a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/openssl.cnf", "size": 0, - "sha1": "c06bb154438af6218b8f58bc0f70520674fb3090", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/openssl.cnf.dist", "size": 0, - "sha1": "c06bb154438af6218b8f58bc0f70520674fb3090", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/CA.pl", "size": 0, - "sha1": "20009ebca84af77198047a7de887b6ea3819d7bb", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/tsget", "size": 0, - "sha1": "dcd5607ebedd414b86631babd2d35a947e842235", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/tsget.pl", "size": 0, - "sha1": "c7d245bd0f6f3c5cc22de4ec0b594a6a86151008", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/libcrypto.so.1.1", "size": 0, - "sha1": "f814fa3d26530a8baf1e66cfe8374dc96d445a81", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/libcrypto.so.1.1", "size": 0, - "sha1": "4f6b22f9ceedb3bb200f1418bdee01de2d43828d", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/afalg.so", "size": 0, - "sha1": "4618d0e6fa10b3d5085a5189a12992827b7033d0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/capi.so", "size": 0, - "sha1": "106df609582d774d27549d6b5c661953f2ffe9f0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/padlock.so", "size": 0, - "sha1": "59400c9ae3240279c1123867a452063492ec2afc", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libcrypto1.1@1.1.1g-r0?arch=x86_64" }, { "type": "alpine", @@ -824,34 +892,36 @@ "license_expression": "openssl-ssleay", "declared_license": "OpenSSL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/openssl@1.1.1g-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/libssl1.1@1.1.1g-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/libssl.so.1.1", "size": 0, - "sha1": "5b425f2461b6f7209899f894965a8c396ec5086c", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/libssl.so.1.1", "size": 0, - "sha1": "f23df9a5edf2a7a1ce80c8a1d709463f5fe69b67", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libssl1.1@1.1.1g-r0?arch=x86_64" }, { "type": "alpine", @@ -889,34 +959,36 @@ "license_expression": "mpl-2.0 AND gpl-2.0-plus", "declared_license": "MPL-2.0 GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/ca-certificates@20191127-r2" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/ca-certificates-bundle@20191127-r2?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/ssl/cert.pem", "size": 0, - "sha1": "363ea04c17646694c55bfa1b2467697ef2b44ad0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/certs/ca-certificates.crt", "size": 0, - "sha1": "fff5130cf90ce33d3c6583d187f30e9f4fdf836b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/ca-certificates-bundle@20191127-r2?arch=x86_64" }, { "type": "alpine", @@ -946,10 +1018,29 @@ "license_expression": "isc", "declared_license": "ISC", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/libtls-standalone@2.9.1-r1" ], + "file_references": [ + { + "path": "usr/lib/libtls-standalone.so.1", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/libtls-standalone.so.1.0.0", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -962,28 +1053,11 @@ "resolved_package": {} } ], - "purl": "pkg:alpine/libtls-standalone@2.9.1-r1?arch=x86_64", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null, - "installed_files": [ - { - "path": "usr/lib/libtls-standalone.so.1", - "size": 0, - "sha1": "31e3c927c02372ebdce71fbabe5177ca0268658c", - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "usr/lib/libtls-standalone.so.1.0.0", - "size": 0, - "sha1": "914f370b123189e3076aed12e399c24f0b8a474a", - "md5": null, - "sha256": null, - "sha512": null - } - ] + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libtls-standalone@2.9.1-r1?arch=x86_64" }, { "type": "alpine", @@ -1021,26 +1095,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/busybox@1.31.1-r16" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/ssl_client@1.31.1-r16?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "usr/bin/ssl_client", "size": 0, - "sha1": "ab7d14b4927427b4b12d018cea40b4892777c1a3", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/ssl_client@1.31.1-r16?arch=x86_64" }, { "type": "alpine", @@ -1078,34 +1153,36 @@ "license_expression": "zlib", "declared_license": "Zlib", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/zlib@1.2.11-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/zlib@1.2.11-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/libz.so.1", "size": 0, - "sha1": "6b61fc84fdb8af208019ff1f9dcd4d85af482077", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/libz.so.1.2.11", "size": 0, - "sha1": "ef4f4263bea9e33108894bf882cc8ff1d6af9578", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/zlib@1.2.11-r3?arch=x86_64" }, { "type": "alpine", @@ -1143,26 +1220,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/apk-tools@2.10.5-r1" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/apk-tools@2.10.5-r1?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "sbin/apk", "size": 0, - "sha1": "1f928f5a65ffc8d0793060f6f6ab919899008937", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/apk-tools@2.10.5-r1?arch=x86_64" }, { "type": "alpine", @@ -1200,26 +1278,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/pax-utils@1.2.6-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/scanelf@1.2.6-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "usr/bin/scanelf", "size": 0, - "sha1": "ca0742501204515725074431bf77d8732c434641", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/scanelf@1.2.6-r0?arch=x86_64" }, { "type": "alpine", @@ -1257,68 +1336,73 @@ "license_expression": "mit AND bsd-new AND gpl-2.0-plus", "declared_license": "MIT BSD GPL2+", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/musl@1.1.24-r8" ], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:alpine/scanelf", - "extracted_requirement": null, - "scope": "depend", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": "pkg:alpine/musl-utils@1.1.24-r8?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "sbin/ldconfig", "size": 0, - "sha1": "2a36b6f8f3992b112450e66ac128c2ea499a103e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/getconf", "size": 0, - "sha1": "503ba79c6c04fd06dde3435db403fe65640d8666", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/getent", "size": 0, - "sha1": "a5ba128d0f532063e8f0ffa457c0c743a6310b46", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/iconv", "size": 0, - "sha1": "b3868fc2e6729f540bf02dab5912069eb4c73289", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/ldd", "size": 0, - "sha1": "c850211a08262fb11181b200eca431c93cdfde4b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:alpine/scanelf", + "extracted_requirement": null, + "scope": "depend", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} } - ] + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/musl-utils@1.1.24-r8?arch=x86_64" }, { "type": "alpine", @@ -1356,10 +1440,10 @@ "license_expression": "bsd-simplified AND bsd-new", "declared_license": "BSD-2-Clause AND BSD-3-Clause", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/libc-dev@0.7.2-r3" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1372,10 +1456,10 @@ "resolved_package": {} } ], - "purl": "pkg:alpine/libc-utils@0.7.2-r3?arch=x86_64", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null, - "installed_files": [] + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libc-utils@0.7.2-r3?arch=x86_64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/single-installed/installed-expected.json b/tests/packagedcode/data/alpine/single-installed/installed-expected.json index 6bf03408acd..0ca555abcb5 100644 --- a/tests/packagedcode/data/alpine/single-installed/installed-expected.json +++ b/tests/packagedcode/data/alpine/single-installed/installed-expected.json @@ -35,73 +35,80 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/busybox@1.31.1-r9" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/busybox@1.31.1-r9?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "bin/busybox", "size": 0, - "sha1": "593739e717ef3e8833034614576e03d189be30a1", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "bin/sh", "size": 0, - "sha1": "a5c7d37c33446cd290736b35b626bb75ad3933c4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/securetty", "size": 0, - "sha1": "e150ec86058595eb836e9e23a9793e50d112eb94", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/udhcpd.conf", "size": 0, - "sha1": "50088f65c0c85b50a5473a1b7e081c090efb576f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/logrotate.d/acpid", "size": 0, - "sha1": "4f29720883559a74be03f4de69de2f66113b064b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/network/if-up.d/dad", "size": 0, - "sha1": "865c5ddea131ae2847f1b6310d0de2ed3b0cff8e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/udhcpc/default.script", "size": 0, - "sha1": "9c33c0dc1c78cd2452bc3397f14dd6366610ff81", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/busybox@1.31.1-r9?arch=x86_64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/alpine/small-installed/installed-expected.json b/tests/packagedcode/data/alpine/small-installed/installed-expected.json index 2041d90ad9a..35112bb677a 100644 --- a/tests/packagedcode/data/alpine/small-installed/installed-expected.json +++ b/tests/packagedcode/data/alpine/small-installed/installed-expected.json @@ -35,34 +35,36 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/musl@1.1.24-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/musl@1.1.24-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/libc.musl-x86_64.so.1", "size": 0, - "sha1": "ef2277245372a40e26c61249af4a2ee82cec2552", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/ld-musl-x86_64.so.1", "size": 0, - "sha1": "b6ff0dbd9f21d0e8da52ed24eaccf1f01cc5024e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/musl@1.1.24-r0?arch=x86_64" }, { "type": "alpine", @@ -100,74 +102,81 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/busybox@1.31.1-r9" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/busybox@1.31.1-r9?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "bin/busybox", "size": 0, - "sha1": "593739e717ef3e8833034614576e03d189be30a1", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "bin/sh", "size": 0, - "sha1": "a5c7d37c33446cd290736b35b626bb75ad3933c4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/securetty", "size": 0, - "sha1": "e150ec86058595eb836e9e23a9793e50d112eb94", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/udhcpd.conf", "size": 0, - "sha1": "50088f65c0c85b50a5473a1b7e081c090efb576f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/logrotate.d/acpid", "size": 0, - "sha1": "4f29720883559a74be03f4de69de2f66113b064b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/network/if-up.d/dad", "size": 0, - "sha1": "865c5ddea131ae2847f1b6310d0de2ed3b0cff8e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/udhcpc/default.script", "size": 0, - "sha1": "9c33c0dc1c78cd2452bc3397f14dd6366610ff81", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/busybox@1.31.1-r9?arch=x86_64" }, { "type": "alpine", @@ -205,234 +214,261 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/alpine-baselayout@3.2.0-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/alpine-baselayout@3.2.0-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/hosts", "size": 0, - "sha1": "043eb324a653456caa1a73e2e2d49f77792bb0c5", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/sysctl.conf", "size": 0, - "sha1": "e2ea73ded7e7371664204b148569fb5e88b0f7a8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/group", "size": 0, - "sha1": "a09d7ac56b9d80a3ab5c812ab840f3945d8bb26e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/protocols", "size": 0, - "sha1": "dc5a97527bee3a9303ac7ffaade871b98004137e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/fstab", "size": 0, - "sha1": "d50ee135ef10a434b9df582ea8276b5c1ce803fa", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/mtab", "size": 0, - "sha1": "9229638575c7d4b950ae81ec1092243d98367a2c", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile", "size": 0, - "sha1": "2a915bf249792efc175a56377b9f0536c8eb237e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/shells", "size": 0, - "sha1": "a239b661da4227a07f6a9183699fd275bdb12640", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/motd", "size": 0, - "sha1": "5e676e555354447436ed3bd8a752ebe5332d15c0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/inittab", "size": 0, - "sha1": "4ecb616e15bb4335917b513f34ac133ae0f8a477", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/hostname", "size": 0, - "sha1": "ea75706155cffed0a1bd43ddba4543da27d73a67", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modules", "size": 0, - "sha1": "b68a208d48a91c670c8040a03c95fae12c144f53", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/services", "size": 0, - "sha1": "3417b4aeb0bc1ccccd9957f8c9b48435cb1d7b2d", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/shadow", "size": 0, - "sha1": "96dacf2005b6cc778389a8ec7b1d81766ab7baa0", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/passwd", "size": 0, - "sha1": "4dc86eb8b51fbabd22cef7d9419c6037f2c9841f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile.d/locale", "size": 0, - "sha1": "4786c81299cac71392ae59d9cbd0286b0a99e435", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/profile.d/color_prompt", "size": 0, - "sha1": "d302f6dc6b920957ee98c4606a469b508e84b129", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/sysctl.d/00-alpine.conf", "size": 0, - "sha1": "09932372e8a3560633070e64922fa848e1c62ba4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/i386.conf", "size": 0, - "sha1": "a676b2fe78e7ea897d702b2c2fb2a2659f1eb657", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/blacklist.conf", "size": 0, - "sha1": "c7160653a4ba4cb42f6fb7abbcfad65b0016a8c8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/aliases.conf", "size": 0, - "sha1": "5946e1e930583552bb7b863eb94bcbb3feef8aa9", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/modprobe.d/kms.conf", "size": 0, - "sha1": "ca76cb9f71980e9bda8db6bf95da759e26b27a88", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/crontabs/root", "size": 0, - "sha1": "bdf9356a9516238c8b2468613517749098b17ef6", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "sbin/mkmntdirs", "size": 0, - "sha1": "a4bf16a4ce2cfe8301c597ab088c95846c08fdab", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/run", "size": 0, - "sha1": "d7f48d673ffc70ad9d48a2be709a55ad922e1784", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/spool/mail", "size": 0, - "sha1": "7736dd6b36190369d3cd2206dd8c8dc3b77826e7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "var/spool/cron/crontabs", "size": 0, - "sha1": "38566df99329ee3d069f2d2ba922ae589caa6260", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/alpine-baselayout@3.2.0-r3?arch=x86_64" }, { "type": "alpine", @@ -470,162 +506,180 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/alpine-keys@2.1-r2" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/alpine-keys@2.1-r2?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "bfb616658cc05a872568b0c8e398c482e23b60dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "3671ae0ec7503b1e193587c1dcdf7b78bc863e42", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "3af08548ef78cfdedcf349880c2c6a1a48763a0e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", "size": 0, - "sha1": "053a92f87fd4532850bb31f0881978efe0532ae5", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "bfb616658cc05a872568b0c8e398c482e23b60dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "3671ae0ec7503b1e193587c1dcdf7b78bc863e42", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", "size": 0, - "sha1": "c8fabeb2eeb992c368c77b9707e0d1ecfd7cf905", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", "size": 0, - "sha1": "39ac5d72c6ba018a0f74b8b453894edc9db07b5f", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "3af08548ef78cfdedcf349880c2c6a1a48763a0e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", "size": 0, - "sha1": "329643357d0b78b1ef48ec155325e25f1d7534dd", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/aarch64/alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub", "size": 0, - "sha1": "ee3f67589910fb07c8b95433205ae6159edf48e7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/ppc64le/alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub", "size": 0, - "sha1": "b76d5d8422db4c99801d748278e32aff6bdf4a0a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub", "size": 0, - "sha1": "638f5e571869bdfb5b437c8076f94b7dcacf2d35", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "222e758bb36b738b9fb75e0786aba0694a9d1fae", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/s390x/alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub", "size": 0, - "sha1": "b236d5dabdb0d08876bf07730b826ae9423b70c4", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/armhf/alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub", "size": 0, - "sha1": "53d42db1d37ead867d661efa11f5f2d342591cc8", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub", "size": 0, - "sha1": "014158f9fc1205372b61eb634fb347bda7eb4907", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/share/apk/keys/x86_64/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub", "size": 0, - "sha1": "222e758bb36b738b9fb75e0786aba0694a9d1fae", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/alpine-keys@2.1-r2?arch=x86_64" }, { "type": "alpine", @@ -663,114 +717,126 @@ "license_expression": "openssl-ssleay", "declared_license": "OpenSSL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/openssl@1.1.1d-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/libcrypto1.1@1.1.1d-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/ssl/openssl.cnf.dist", "size": 0, - "sha1": "c06bb154438af6218b8f58bc0f70520674fb3090", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/ct_log_list.cnf", "size": 0, - "sha1": "a2587c4e97408b64274e5e052b74e3754892c13a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/ct_log_list.cnf.dist", "size": 0, - "sha1": "a2587c4e97408b64274e5e052b74e3754892c13a", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/openssl.cnf", "size": 0, - "sha1": "c06bb154438af6218b8f58bc0f70520674fb3090", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/CA.pl", "size": 0, - "sha1": "20009ebca84af77198047a7de887b6ea3819d7bb", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/tsget.pl", "size": 0, - "sha1": "ae00254bfd037237f32e08755c646e65d771f1bc", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "etc/ssl/misc/tsget", "size": 0, - "sha1": "dcd5607ebedd414b86631babd2d35a947e842235", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/libcrypto.so.1.1", "size": 0, - "sha1": "8d8e8d8a94207ff88aaab893128654ecfbebe514", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/libcrypto.so.1.1", "size": 0, - "sha1": "4f6b22f9ceedb3bb200f1418bdee01de2d43828d", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/capi.so", "size": 0, - "sha1": "5b2a9ed00e4a06e23c170a9d68b9fde53c7a239e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/padlock.so", "size": 0, - "sha1": "db4967e857bb054634c001a186817f622361fdc1", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/engines-1.1/afalg.so", "size": 0, - "sha1": "d2708466ab71c394ac769afc1925fdaf2b36504e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libcrypto1.1@1.1.1d-r3?arch=x86_64" }, { "type": "alpine", @@ -808,34 +874,36 @@ "license_expression": "openssl-ssleay", "declared_license": "OpenSSL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/openssl@1.1.1d-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/libssl1.1@1.1.1d-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/libssl.so.1.1", "size": 0, - "sha1": "99f8e298c5e0aeebb199dcfe160e3b180937569d", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/lib/libssl.so.1.1", "size": 0, - "sha1": "f23df9a5edf2a7a1ce80c8a1d709463f5fe69b67", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libssl1.1@1.1.1d-r3?arch=x86_64" }, { "type": "alpine", @@ -873,26 +941,27 @@ "license_expression": "mpl-2.0 AND gpl-2.0-plus", "declared_license": "MPL-2.0 GPL-2.0-or-later", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/ca-certificates@20191127-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/ca-certificates-cacert@20191127-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "etc/ssl/cert.pem", "size": 0, - "sha1": "062fa758c7d5f4778b2fd9a0c885846fd8a1edb6", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/ca-certificates-cacert@20191127-r0?arch=x86_64" }, { "type": "alpine", @@ -922,10 +991,29 @@ "license_expression": "isc", "declared_license": "ISC", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/libtls-standalone@2.9.1-r0" ], + "file_references": [ + { + "path": "usr/lib/libtls-standalone.so.1.0.0", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/libtls-standalone.so.1", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -938,28 +1026,11 @@ "resolved_package": {} } ], - "purl": "pkg:alpine/libtls-standalone@2.9.1-r0?arch=x86_64", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null, - "installed_files": [ - { - "path": "usr/lib/libtls-standalone.so.1.0.0", - "size": 0, - "sha1": "9a950143fb08c7764121aed774528aa9730c035c", - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "usr/lib/libtls-standalone.so.1", - "size": 0, - "sha1": "31e3c927c02372ebdce71fbabe5177ca0268658c", - "md5": null, - "sha256": null, - "sha512": null - } - ] + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libtls-standalone@2.9.1-r0?arch=x86_64" }, { "type": "alpine", @@ -997,26 +1068,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/busybox@1.31.1-r9" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/ssl_client@1.31.1-r9?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "usr/bin/ssl_client", "size": 0, - "sha1": "624b05e8cd2beb76d1ae4673606e0944a0ed4c1c", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/ssl_client@1.31.1-r9?arch=x86_64" }, { "type": "alpine", @@ -1054,34 +1126,36 @@ "license_expression": "zlib", "declared_license": "Zlib", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/zlib@1.2.11-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/zlib@1.2.11-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "lib/libz.so.1.2.11", "size": 0, - "sha1": "ad943ba0e05c2fe186aa8ad7b8bf8e973c8194e7", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "lib/libz.so.1", "size": 0, - "sha1": "6b61fc84fdb8af208019ff1f9dcd4d85af482077", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/zlib@1.2.11-r3?arch=x86_64" }, { "type": "alpine", @@ -1119,26 +1193,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL2", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/apk-tools@2.10.4-r3" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/apk-tools@2.10.4-r3?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "sbin/apk", "size": 0, - "sha1": "8672f3a1ee3315a0b7f43187a9e1a1ea4558e725", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/apk-tools@2.10.4-r3?arch=x86_64" }, { "type": "alpine", @@ -1176,26 +1251,27 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/pax-utils@1.2.4-r0" ], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:alpine/scanelf@1.2.4-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "usr/bin/scanelf", "size": 0, - "sha1": "6aa94ad77b1256c19aff82cfcfccaeaff704873b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/scanelf@1.2.4-r0?arch=x86_64" }, { "type": "alpine", @@ -1233,68 +1309,73 @@ "license_expression": "mit AND bsd-new AND gpl-2.0-plus", "declared_license": "MIT BSD GPL2+", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/musl@1.1.24-r0" ], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:alpine/scanelf", - "extracted_requirement": null, - "scope": "depend", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": "pkg:alpine/musl-utils@1.1.24-r0?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "sbin/ldconfig", "size": 0, - "sha1": "2a36b6f8f3992b112450e66ac128c2ea499a103e", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/iconv", "size": 0, - "sha1": "fb0c7e9f95216a2096952aecbc9df7e7465d8203", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/ldd", "size": 0, - "sha1": "c850211a08262fb11181b200eca431c93cdfde4b", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/getconf", "size": 0, - "sha1": "2b815fb9c37324b73cde901bc09c5c170ba1d7ad", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "usr/bin/getent", "size": 0, - "sha1": "8a2520dfc1b799404cbad685cd0b09436b43bc51", + "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:alpine/scanelf", + "extracted_requirement": null, + "scope": "depend", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} } - ] + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/musl-utils@1.1.24-r0?arch=x86_64" }, { "type": "alpine", @@ -1332,10 +1413,10 @@ "license_expression": "bsd-new", "declared_license": "BSD", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:alpine/libc-dev@0.7.2-r0" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1348,10 +1429,10 @@ "resolved_package": {} } ], - "purl": "pkg:alpine/libc-utils@0.7.2-r0?arch=x86_64", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null, - "installed_files": [] + "datasource_id": "alpine_installed_db", + "purl": "pkg:alpine/libc-utils@0.7.2-r0?arch=x86_64" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_alpine.py b/tests/packagedcode/test_alpine.py index b0d077ff941..12284fea7d2 100644 --- a/tests/packagedcode/test_alpine.py +++ b/tests/packagedcode/test_alpine.py @@ -25,21 +25,27 @@ class TestAlpineInstalledPackage(PackageTester): def test_parse_alpine_installed_db_small(self): test_installed = self.get_test_loc('alpine/small-installed/installed') result = [package.to_dict(_detailed=True) - for package in alpine.parse_alpine_installed_db(test_installed)] + for package in alpine.parse_alpine_installed_db( + location=test_installed, datasource_id='alpine_installed_db', package_type='alpine', + )] expected = test_installed + '-expected.json' check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) def test_parse_alpine_installed_db_single(self): test_installed = self.get_test_loc('alpine/single-installed/installed') result = [package.to_dict(_detailed=True) - for package in alpine.parse_alpine_installed_db(test_installed)] + for package in alpine.parse_alpine_installed_db( + location=test_installed, datasource_id='alpine_installed_db', package_type='alpine', + )] expected = test_installed + '-expected.json' check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) def test_parse_alpine_installed_db_full(self): test_installed = self.get_test_loc('alpine/full-installed/installed') result = [package.to_dict(_detailed=True) - for package in alpine.parse_alpine_installed_db(test_installed)] + for package in alpine.parse_alpine_installed_db( + location=test_installed, datasource_id='alpine_installed_db', package_type='alpine', + )] expected = test_installed + '-expected.json' check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) From 075282731386b48860c9996fef923441fce36735 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 08:33:51 +0200 Subject: [PATCH 09/36] Adopt new handler design for Bower We now have one handler: BowerJsonHandler Signed-off-by: Philippe Ombredanne --- src/packagedcode/bower.py | 78 ++---- .../data/bower/author-objects/expected.json | 7 +- .../data/bower/basic/expected.json | 7 +- .../data/bower/list-of-licenses/expected.json | 7 +- .../data/bower/scan-expected.json | 233 ++++++++++++++++++ tests/packagedcode/data/bower/scan/bower.json | 45 ++++ tests/packagedcode/test_bower.py | 25 +- 7 files changed, 324 insertions(+), 78 deletions(-) create mode 100644 tests/packagedcode/data/bower/scan-expected.json create mode 100644 tests/packagedcode/data/bower/scan/bower.json diff --git a/src/packagedcode/bower.py b/src/packagedcode/bower.py index 83910c1a86d..ff16a58eb51 100644 --- a/src/packagedcode/bower.py +++ b/src/packagedcode/bower.py @@ -9,65 +9,33 @@ import io import json -import logging -import attr from packageurl import PackageURL -from commoncode import filetype from packagedcode import models from packagedcode.utils import combine_expressions -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - -@attr.s() -class BowerPackageData(models.PackageData): - - default_type = 'bower' +# TODO: handle complex cases of npms and bower combined +class BowerJsonHandler(models.DatafileHandler): + datasource_id = 'bower_json' + path_patterns = ('*/bower.json', '*/.bower.json',) + default_package_type = 'bower' + default_primary_language = 'JavaScript' + description = 'Bower package' + documentation_url = 'https://bower.io' @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) - - -@attr.s() -class BowerJson(BowerPackageData, models.PackageDataFile): - - file_patterns = ('bower.json', '.bower.json') - extensions = ('.json',) + def compute_normalized_license(cls, package): + return compute_bower_normalized_license(package.declared_license) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.lower().endswith(('bower.json', '.bower.json')) - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with io.open(location, encoding='utf-8') as loc: package_data = json.load(loc) + # note: having no name is not a problem for private packages. See #1514 name = package_data.get('name') - # FIXME: having no name may not be a problem See #1514 - if not name: - return description = package_data.get('description') version = package_data.get('version') @@ -105,7 +73,7 @@ def recognize(cls, location): vcs_url = None if repo_type and repo_url: - vcs_url = '{}+{}'.format(repo_type, repo_url) + vcs_url = f'{repo_type}+{repo_url}' deps = package_data.get('dependencies') or {} dependencies = [] @@ -132,7 +100,9 @@ def recognize(cls, location): ) ) - yield cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, description=description, version=version, @@ -145,21 +115,7 @@ def recognize(cls, location): ) -@attr.s() -class BowerPackage(BowerPackageData, models.Package): - """ - A Bower Package that is created out of one/multiple bower package - manifests and package-like data, with it's files. - """ - - @property - def manifests(self): - return [ - BowerJson - ] - - -def compute_normalized_license(declared_license): +def compute_bower_normalized_license(declared_license): """ Return a normalized license expression string detected from a list of declared license strings. diff --git a/tests/packagedcode/data/bower/author-objects/expected.json b/tests/packagedcode/data/bower/author-objects/expected.json index 36c562bdb4d..315109afde0 100644 --- a/tests/packagedcode/data/bower/author-objects/expected.json +++ b/tests/packagedcode/data/bower/author-objects/expected.json @@ -48,8 +48,8 @@ "BSD-3-Clause" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -80,9 +80,10 @@ "resolved_package": {} } ], - "purl": "pkg:bower/John%20Doe", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bower_json", + "purl": "pkg:bower/John%20Doe" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/bower/basic/expected.json b/tests/packagedcode/data/bower/basic/expected.json index b9f335b141d..db3a6bfa996 100644 --- a/tests/packagedcode/data/bower/basic/expected.json +++ b/tests/packagedcode/data/bower/basic/expected.json @@ -39,8 +39,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -71,9 +71,10 @@ "resolved_package": {} } ], - "purl": "pkg:bower/blue-leaf", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bower_json", + "purl": "pkg:bower/blue-leaf" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/bower/list-of-licenses/expected.json b/tests/packagedcode/data/bower/list-of-licenses/expected.json index 2372bc48805..821cd069912 100644 --- a/tests/packagedcode/data/bower/list-of-licenses/expected.json +++ b/tests/packagedcode/data/bower/list-of-licenses/expected.json @@ -41,8 +41,8 @@ "BSD-3-Clause" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -73,9 +73,10 @@ "resolved_package": {} } ], - "purl": "pkg:bower/blue-leaf", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bower_json", + "purl": "pkg:bower/blue-leaf" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/bower/scan-expected.json b/tests/packagedcode/data/bower/scan-expected.json new file mode 100644 index 00000000000..aa4bf94aac5 --- /dev/null +++ b/tests/packagedcode/data/bower/scan-expected.json @@ -0,0 +1,233 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 1 + } + } + ], + "dependencies": [ + { + "purl": "pkg:bower/get-size", + "extracted_requirement": "~1.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:bower/get-size?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/John%20Doe?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/bower.json", + "datasource_id": "bower_json" + }, + { + "purl": "pkg:bower/eventEmitter", + "extracted_requirement": "~4.2.11", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:bower/eventEmitter?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/John%20Doe?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/bower.json", + "datasource_id": "bower_json" + }, + { + "purl": "pkg:bower/qunit", + "extracted_requirement": "~1.16.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:bower/qunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/John%20Doe?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/bower.json", + "datasource_id": "bower_json" + } + ], + "packages": [ + { + "type": "bower", + "namespace": null, + "name": "John Doe", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": "Physics-like animations for pretty particles", + "release_date": null, + "parties": [ + { + "type": null, + "role": "author", + "name": "Betty Beta ", + "email": null, + "url": null + }, + { + "type": null, + "role": "author", + "name": "John Doe", + "email": "john@doe.com", + "url": "http://johndoe.com" + } + ], + "keywords": [ + "motion", + "physics", + "particles" + ], + "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, + "license_expression": "mit AND apache-2.0 AND bsd-new", + "declared_license": [ + "MIT", + "Apache 2.0", + "BSD-3-Clause" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:bower/John%20Doe?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/bower.json" + ], + "datasource_ids": [ + "bower_json" + ], + "purl": "pkg:bower/John%20Doe" + } + ], + "files": [ + { + "path": "scan", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/bower.json", + "type": "file", + "package_data": [ + { + "type": "bower", + "namespace": null, + "name": "John Doe", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": "Physics-like animations for pretty particles", + "release_date": null, + "parties": [ + { + "type": null, + "role": "author", + "name": "Betty Beta ", + "email": null, + "url": null + }, + { + "type": null, + "role": "author", + "name": "John Doe", + "email": "john@doe.com", + "url": "http://johndoe.com" + } + ], + "keywords": [ + "motion", + "physics", + "particles" + ], + "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, + "license_expression": null, + "declared_license": [ + "MIT", + "Apache 2.0", + "BSD-3-Clause" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:bower/get-size", + "extracted_requirement": "~1.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:bower/eventEmitter", + "extracted_requirement": "~4.2.11", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:bower/qunit", + "extracted_requirement": "~1.16.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "bower_json", + "purl": "pkg:bower/John%20Doe" + } + ], + "for_packages": [ + "pkg:bower/John%20Doe?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/bower/scan/bower.json b/tests/packagedcode/data/bower/scan/bower.json new file mode 100644 index 00000000000..ae4d7e23250 --- /dev/null +++ b/tests/packagedcode/data/bower/scan/bower.json @@ -0,0 +1,45 @@ +{ + "name": "blue-leaf", + "description": "Physics-like animations for pretty particles", + "main": [ + "js/motion.js", + "sass/motion.scss" + ], + "dependencies": { + "get-size": "~1.2.2", + "eventEmitter": "~4.2.11" + }, + "devDependencies": { + "qunit": "~1.16.0" + }, + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "motion", + "physics", + "particles" + ], + "authors": [ + "Betty Beta ", + { + "name": "John Doe", + "email": "john@doe.com", + "homepage": "http://johndoe.com" + } + ], + "license": [ + "MIT", + "Apache 2.0", + "BSD-3-Clause" + ], + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} \ No newline at end of file diff --git a/tests/packagedcode/test_bower.py b/tests/packagedcode/test_bower.py index 0176963bce9..e2185dfa1cb 100644 --- a/tests/packagedcode/test_bower.py +++ b/tests/packagedcode/test_bower.py @@ -14,28 +14,37 @@ from scancode_config import REGEN_TEST_FIXTURES - class TestBower(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_is_manifest_bower_json(self): test_file = self.get_test_loc('bower/basic/bower.json') - assert bower.BowerJson.is_package_data_file(test_file) + assert bower.BowerJsonHandler.is_datafile(test_file) def test_parse_bower_json_basic(self): test_file = self.get_test_loc('bower/basic/bower.json') - package = bower.BowerJson.recognize(test_file) + package = bower.BowerJsonHandler.parse(test_file) expected_loc = self.get_test_loc('bower/basic/expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_bower_json_list_of_licenses(self): test_file = self.get_test_loc('bower/list-of-licenses/bower.json') - package = bower.BowerJson.recognize(test_file) + package = bower.BowerJsonHandler.parse(test_file) expected_loc = self.get_test_loc('bower/list-of-licenses/expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_bower_json_author_objects(self): test_file = self.get_test_loc('bower/author-objects/bower.json') - package = bower.BowerJson.recognize(test_file) + package = bower.BowerJsonHandler.parse(test_file) expected_loc = self.get_test_loc('bower/author-objects/expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_end2end_bower_scan_is_moved_to_parent(self): + from scancode.cli_test_utils import check_json_scan + from scancode.cli_test_utils import run_scan_click + + test_file = self.get_test_loc('bower/scan') + expected_file = self.get_test_loc('bower/scan-expected.json') + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json-pp', result_file]) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) From ba0ed20aec8de3fb06addfef404c62369c9e4965 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 08:42:46 +0200 Subject: [PATCH 10/36] Adopt new handler design for build scripts We now have separate handlers: * AutotoolsConfigureHandler * BazelBuildHandler * BuckPackageHandler * BuckMetadataBzlHandler Signed-off-by: Philippe Ombredanne --- src/packagedcode/build.py | 299 +++++++++++------- .../data/build/bazel/end2end-expected.json | 141 +++++++-- .../data/build/buck/end2end-expected.json | 147 +++++++-- tests/packagedcode/test_build.py | 80 ++--- 4 files changed, 475 insertions(+), 192 deletions(-) diff --git a/src/packagedcode/build.py b/src/packagedcode/build.py index 4697b7d9943..dee192784f0 100644 --- a/src/packagedcode/build.py +++ b/src/packagedcode/build.py @@ -7,78 +7,60 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -from collections import defaultdict import ast -import logging -import os - -import attr +from collections import defaultdict from commoncode import fileutils + from packagedcode import models from packagedcode.utils import combine_expressions from scancode.api import get_licenses - -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - """ Detect as Packages common build tools and environment such as Make, Autotools, -gradle, Buck, Bazel, Pants, etc. +Buck, Bazel, Pants, etc. """ -@attr.s() -class BaseBuildManifestPackageData(models.PackageData): - file_patterns = tuple() +class AutotoolsConfigureHandler(models.DatafileHandler): + datasource_id = 'autotools_configure' + path_patterns = ('*/configure', '*/configure.ac',) + default_package_type = 'autotools' + description = 'Autotools configure script' + documentation_url = 'https://www.gnu.org/software/automake/' @classmethod - def recognize(cls, location): - if not cls.is_package_data_file(location): - return - - # we use the parent directory as a name + def parse(cls, location): + # we use the parent directory as a package name name = fileutils.file_name(fileutils.parent_directory(location)) # we could use checksums as version in the future version = None # there is an optional array of license file names in targets that we could use # declared_license = None - # there is are dependencies we could use + + # there are dependencies we could use # dependencies = [] - yield cls( + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, - version=version) + version=version, + ) @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - -@attr.s() -class AutotoolsPackage(BaseBuildManifestPackageData, models.PackageDataFile): - file_patterns = ('configure', 'configure.ac',) - default_type = 'autotools' - - -starlark_rule_types = [ - 'binary', - 'library' -] + def assign_package_to_resources(cls, package, resource, codebase): + cls.assign_package_to_parent_tree( + package=package, + resource=resource, + codebase=codebase, + ) -def check_rule_name_ending(rule_name): +def check_rule_name_ending(rule_name, starlark_rule_types=('binary', 'library')): """ Return True if `rule_name` ends with a rule type from `starlark_rule_types` - Return False otherwise """ for rule_type in starlark_rule_types: @@ -87,16 +69,48 @@ def check_rule_name_ending(rule_name): return False -@attr.s() -class StarlarkManifestPackage(BaseBuildManifestPackageData, models.PackageDataFile): +class BaseStarlarkManifestHandler(models.DatafileHandler): + """ + Common base class for Bazel and Buck that both use the Starlark syntax. + """ @classmethod - def recognize(cls, location): - if not cls.is_package_data_file(location): - return + def assemble(cls, package_data, resource, codebase): + """ + Given a ``package_data`` PackageData found in the ``resource`` datafile + of the ``codebase``, assemble package their files and dependencies + from one or more datafiles. + """ + datafile_path = resource.path + # do we have enough to create a package? + if package_data.purl: + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=datafile_path, + ) + + if not package.license_expression: + package.license_expression = compute_normalized_license( + package=package, + resource=resource, + codebase=codebase, + ) + + cls.assign_package_to_resources( + package=package, + resource=resource, + codebase=codebase, + ) + + yield package + + # we yield this as we do not want this further processed + yield resource - # Thanks to Starlark being a Python dialect, we can use the `ast` - # library to parse it + @classmethod + def parse(cls, location): + + # Thanks to Starlark being a Python dialect, we can use `ast` to parse it with open(location, 'rb') as f: tree = ast.parse(f.read()) @@ -104,11 +118,13 @@ def recognize(cls, location): for statement in tree.body: # We only care about function calls or assignments to functions whose # names ends with one of the strings in `rule_types` - if (isinstance(statement, ast.Expr) - or isinstance(statement, ast.Call) - or isinstance(statement, ast.Assign) - and isinstance(statement.value, ast.Call) - and isinstance(statement.value.func, ast.Name)): + if ( + isinstance(statement, ast.Expr) + or isinstance(statement, ast.Call) + or isinstance(statement, ast.Assign) + and isinstance(statement.value, ast.Call) + and isinstance(statement.value.func, ast.Name) + ): rule_name = statement.value.func.id # Ensure that we are only creating packages from the proper # build rules @@ -120,9 +136,14 @@ def recognize(cls, location): arg_name = kw.arg if isinstance(kw.value, ast.Str): args[arg_name] = kw.value.s + if isinstance(kw.value, ast.List): - # We collect the elements of a list if the element is not a function call - args[arg_name] = [elt.s for elt in kw.value.elts if not isinstance(elt, ast.Call)] + # We collect the elements of a list if the element is + # not a function call + args[arg_name] = [ + elt.s for elt in kw.value.elts + if not isinstance(elt, ast.Call) + ] if args: build_rules[rule_name].append(args) @@ -130,68 +151,123 @@ def recognize(cls, location): for rule_name, rule_instances_args in build_rules.items(): for args in rule_instances_args: name = args.get('name') + + # FIXME: we could still return partial package data if not name: continue + license_files = args.get('licenses') - manifest = cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, declared_license=license_files, ) - manifest.license_expression = manifest.compute_normalized_license( - manifest_parent_path=fileutils.parent_directory(location) - ) - yield manifest + else: - # If we don't find anything in the manifest file, we yield a Package with - # the parent directory as the name - yield cls( + # If we don't find anything in the pkgdata file, we yield a Package + # with the parent directory as the name + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=fileutils.file_name(fileutils.parent_directory(location)) ) - def compute_normalized_license(self, manifest_parent_path): - """ - Return a normalized license expression string detected from a list of - declared license items. - """ - declared_license = self.declared_license + @classmethod + def assign_package_to_resources(cls, package, resource, codebase, skip_name=None): + package_uid = package.package_uid + parent = resource.parent(codebase) + for res in walk_build(resource=parent, codebase=codebase, skip_name=skip_name): + res.for_packages.append(package_uid) + res.save(codebase) - if not declared_license or not manifest_parent_path: - return - license_expressions = [] - for license_file in declared_license: - license_file_path = os.path.join(manifest_parent_path, license_file) - if os.path.exists(license_file_path) and os.path.isfile(license_file_path): - licenses = get_licenses(license_file_path) +def walk_build(resource, codebase, skip_name): + """ + Walk the ``codebase`` starting at ``resource`` and stop when ``skip_name`` + is found in a subdirectory. The idea is to avoid walking recursively sub- + directories that contain a build script such as a Bazel or BUCK file as they + define their own file tree. + """ + for child in resource.children(codebase): + yield child + if not child.is_dir: + continue + if not any(r.name == skip_name for r in child.children(codebase)): + for subchild in walk_build(child, codebase, skip_name=skip_name): + yield subchild + + +def compute_normalized_license(package, resource, codebase): + """ + Return a normalized license expression string detected from a list of + declared license items. + """ + declared_licenses = package.declared_license + if not declared_licenses: + return + + declared_licenses = set(declared_licenses) + + license_expressions = [] + + parent = resource.parent(codebase) + # FIXME: we should be able to get the path relatively to the ABOUT file resource + for child in parent.children(codebase): + if child.name in declared_licenses: + licenses = get_licenses(child.location) + if not licenses: + license_expressions.append('unknown') + else: license_expressions.extend(licenses.get('license_expressions', [])) - return combine_expressions(license_expressions) + return combine_expressions(license_expressions) + +class BazelBuildHandler(BaseStarlarkManifestHandler): + datasource_id = 'bazel_build' + path_patterns = ('*/BUILD',) + default_package_type = 'bazel' + description = 'Bazel BUILD' + documentation_url = 'https://bazel.build/' + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUILD'): + return super().assign_package_to_resources( + package=package, + resource=resource, + codebase=codebase, + skip_name=skip_name, + ) -@attr.s() -class BazelPackage(StarlarkManifestPackage): - file_patterns = ('BUILD',) - default_type = 'bazel' +class BuckPackageHandler(BaseStarlarkManifestHandler): + datasource_id = 'buck_file' + path_patterns = ('*/BUCK',) + default_package_type = 'buck' + description = 'Buck file' + documentation_url = 'https://buck.build/' -@attr.s() -class BuckPackage(StarlarkManifestPackage): - file_patterns = ('BUCK',) - default_type = 'buck' + @classmethod + def assign_package_to_resources(cls, package, resource, codebase, skip_name='BUCK'): + return super().assign_package_to_resources( + package=package, + resource=resource, + codebase=codebase, + skip_name=skip_name, + ) -@attr.s() -class MetadataBzl(BaseBuildManifestPackageData, models.PackageDataFile): - file_patterns = ('METADATA.bzl',) - # TODO: Not sure what the default type should be, change this to something - # more appropriate later - default_type = 'METADATA.bzl' +class BuckMetadataBzlHandler(BaseStarlarkManifestHandler): + datasource_id = 'buck_metadata' + path_patterns = ('*/METADATA.bzl',) + default_package_type = 'buck' + description = 'Buck metadata file' + documentation_url = 'https://buck.build/' @classmethod - def recognize(cls, location): - if not cls.is_package_data_file(location): - return + def parse(cls, location): with open(location, 'rb') as f: tree = ast.parse(f.read()) @@ -200,6 +276,7 @@ def recognize(cls, location): for statement in tree.body: if not (hasattr(statement, 'targets') and isinstance(statement, ast.Assign)): continue + # We are looking for a dictionary assigned to the variable `METADATA` for target in statement.targets: if not (target.id == 'METADATA' and isinstance(statement.value, ast.Dict)): @@ -234,28 +311,34 @@ def recognize(cls, location): # TODO: Create function that determines package type from download URL, # then create a package of that package type from the metadata info - yield cls( - type=metadata_fields.get('upstream_type', ''), - name=metadata_fields.get('name', ''), - version=metadata_fields.get('version', ''), + yield models.PackageData( + datasource_id=cls.datasource_id, + type=metadata_fields.get('upstream_type', cls.default_package_type), + name=metadata_fields.get('name'), + version=metadata_fields.get('version'), declared_license=metadata_fields.get('licenses', []), parties=parties, homepage_url=metadata_fields.get('upstream_address', ''), # TODO: Store 'upstream_hash` somewhere ) - def compute_normalized_license(self): - """ - Return a normalized license expression string detected from a list of - declared license strings. - """ - if not self.declared_license: + @classmethod + def compute_normalized_license(cls, package): + if not package.declared_license: return detected_licenses = [] - for declared in self.declared_license: + for declared in package.declared_license: detected_license = models.compute_normalized_license(declared) detected_licenses.append(detected_license) if detected_licenses: return combine_expressions(detected_licenses) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + cls.assign_package_to_parent_tree( + package_=package, + resource=resource, + codebase=codebase, + ) diff --git a/tests/packagedcode/data/build/bazel/end2end-expected.json b/tests/packagedcode/data/build/bazel/end2end-expected.json index b58e9b5c7ba..6d5be4ec5b5 100644 --- a/tests/packagedcode/data/build/bazel/end2end-expected.json +++ b/tests/packagedcode/data/build/bazel/end2end-expected.json @@ -19,7 +19,88 @@ } ], "dependencies": [], - "packages": [], + "packages": [ + { + "type": "bazel", + "namespace": null, + "name": "end2end", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "end2end/BUILD" + ], + "datasource_ids": [ + "bazel_build" + ], + "purl": "pkg:bazel/end2end" + }, + { + "type": "bazel", + "namespace": null, + "name": "subdir2", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:bazel/subdir2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "end2end/subdir2/BUILD" + ], + "datasource_ids": [ + "bazel_build" + ], + "purl": "pkg:bazel/subdir2" + } + ], "files": [ { "path": "end2end", @@ -55,55 +136,68 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:bazel/end2end", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bazel_build", + "purl": "pkg:bazel/end2end" } ], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/dir", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/dir/file1", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/file1", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -133,41 +227,50 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:bazel/subdir2", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bazel_build", + "purl": "pkg:bazel/subdir2" } ], - "for_packages": [], + "for_packages": [ + "pkg:bazel/subdir2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/file2", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/subdir2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/subdir3", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/subdir2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/subdir3/file2", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:bazel/subdir2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/build/buck/end2end-expected.json b/tests/packagedcode/data/build/buck/end2end-expected.json index 4e258672ce2..26b0633c0f7 100644 --- a/tests/packagedcode/data/build/buck/end2end-expected.json +++ b/tests/packagedcode/data/build/buck/end2end-expected.json @@ -19,7 +19,90 @@ } ], "dependencies": [], - "packages": [], + "packages": [ + { + "type": "buck", + "namespace": null, + "name": "end2end", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "end2end/BUCK" + ], + "datasource_ids": [ + "buck_file" + ], + "purl": "pkg:buck/end2end" + }, + { + "type": "buck", + "namespace": null, + "name": "bin", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": "apache-2.0", + "declared_license": [ + "LICENSE" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "end2end/subdir2/BUCK" + ], + "datasource_ids": [ + "buck_file" + ], + "purl": "pkg:buck/bin" + } + ], "files": [ { "path": "end2end", @@ -55,55 +138,68 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:buck/end2end", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "buck_file", + "purl": "pkg:buck/end2end" } ], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/dir", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/dir/file1", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir/file1", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/end2end?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -133,50 +229,61 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "apache-2.0", + "license_expression": null, "declared_license": [ "LICENSE" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:buck/bin", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "buck_file", + "purl": "pkg:buck/bin" } ], - "for_packages": [], + "for_packages": [ + "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/LICENSE", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/file2", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/subdir3", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "end2end/subdir2/subdir3/file2", "type": "file", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:buck/bin?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] } ] diff --git a/tests/packagedcode/test_build.py b/tests/packagedcode/test_build.py index d0b9374fca3..0db3365710c 100644 --- a/tests/packagedcode/test_build.py +++ b/tests/packagedcode/test_build.py @@ -14,6 +14,7 @@ from packagedcode import build from packagedcode import models from packages_test_utils import PackageTester +from packages_test_utils import compare_package_results from scancode.cli_test_utils import check_json_scan from scancode.cli_test_utils import run_scan_click from scancode_config import REGEN_TEST_FIXTURES @@ -37,53 +38,55 @@ def test_end2end_scan_can_detect_buck(self): run_scan_click(['--package', test_file, '--json-pp', result_file]) check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) - def test_build_get_package_resources(self): - test_loc = self.get_test_loc('get_package_resources') - codebase = Codebase(test_loc) - root = codebase.root - expected = [ - 'get_package_resources', - 'get_package_resources/BUCK', - 'get_package_resources/file1', - ] - results = [r.path for r in build.BaseBuildManifestPackageData.get_package_resources(root, codebase)] - assert results == expected - - def test_BazelPackage_recognize(self): + def test_BazelPackage_parse(self): test_file = self.get_test_loc('bazel/parse/BUILD') - result_packages = build.BazelPackage.recognize(test_file) + result_packages = build.BazelBuildHandler.parse(test_file) expected_packages = [ - build.BazelPackage(name='hello-greet'), - build.BazelPackage(name='hello-world'), + models.PackageData( + name='hello-greet', + type=build.BazelBuildHandler.default_package_type, + datasource_id=build.BazelBuildHandler.datasource_id, + ), + models.PackageData( + name='hello-world', + type=build.BazelBuildHandler.default_package_type, + datasource_id=build.BazelBuildHandler.datasource_id, + ) ] compare_package_results(expected_packages, result_packages) - def test_BuckPackage_recognize(self): + def test_BuckPackage_parse(self): test_file = self.get_test_loc('buck/parse/BUCK') - result_packages = build.BuckPackage.recognize(test_file) + result_packages = build.BuckPackageHandler.parse(test_file) expected_packages = [ - build.BuckPackage(name='app'), - build.BuckPackage(name='app2'), + models.PackageData( + name='app', + type=build.BuckPackageHandler.default_package_type, + datasource_id=build.BuckPackageHandler.datasource_id, + ), + models.PackageData( + name='app2', + type=build.BuckPackageHandler.default_package_type, + datasource_id=build.BuckPackageHandler.datasource_id, + ), ] compare_package_results(expected_packages, result_packages) def test_BuckPackage_recognize_with_license(self): test_file = self.get_test_loc('buck/parse/license/BUCK') - result_packages = build.BuckPackage.recognize(test_file) - expected_packages = [ - build.BuckPackage( - name='app', - declared_license=['LICENSE'], - license_expression= 'apache-2.0', - ) - ] - compare_package_results(expected_packages, result_packages) + test_loc = self.get_test_loc('buck/parse/license/') + result_package = list(build.BuckPackageHandler.parse(test_file))[0] + codebase = Codebase(test_loc) + resource = codebase.get_resource_from_path(test_file, absolute=True) + license_expression = build.compute_normalized_license(result_package, resource, codebase) + assert license_expression == 'apache-2.0' - def test_MetadataBzl_recognize(self): + def test_MetadataBzl_parse(self): test_file = self.get_test_loc('metadatabzl/METADATA.bzl') - result_packages = build.MetadataBzl.recognize(test_file) + result_packages = build.BuckMetadataBzlHandler.parse(test_file) expected_packages = [ - build.MetadataBzl( + models.PackageData( + datasource_id=build.BuckMetadataBzlHandler.datasource_id, type='github', name='example', version='0.0.1', @@ -100,16 +103,3 @@ def test_MetadataBzl_recognize(self): ] compare_package_results(expected_packages, result_packages) - -def compare_package_results(expected, result): - # We don't want to compare `root_path`, since the result will always - # have a different `root_path` than the expected result - result_packages = [] - for result_package in result: - r = result_package.to_dict() - result_packages.append(r) - expected_packages = [] - for expected_package in expected: - e = expected_package.to_dict() - expected_packages.append(e) - assert result_packages == expected_packages From 229d9455c2b48ef4dc3f6a5a2f077af8b0cf5117 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:26:11 +0200 Subject: [PATCH 11/36] Adopt new handler design for Gradle build scripts We now have this handler to parse Gradle files: * BuildGradleHandler Signed-off-by: Philippe Ombredanne --- src/packagedcode/build_gradle.py | 74 ++++++++++--------- .../data/build_gradle/end2end-expected.json | 53 +++++++------ tests/packagedcode/test_build_gradle.py | 33 +++------ 3 files changed, 81 insertions(+), 79 deletions(-) diff --git a/src/packagedcode/build_gradle.py b/src/packagedcode/build_gradle.py index 047fc0f5d08..6daf41e15b0 100644 --- a/src/packagedcode/build_gradle.py +++ b/src/packagedcode/build_gradle.py @@ -7,27 +7,39 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging - from packageurl import PackageURL from pygmars import Token from pygmars.parse import Parser from pygments import lex -from pygments.lexers import GroovyLexer -import attr +from pygments.lexers.jvm import GroovyLexer from packagedcode import models -from packagedcode.build import BaseBuildManifestPackageData +# TODO: split groovy and kotlin handlers -TRACE = False -logger = logging.getLogger(__name__) +class BuildGradleHandler(models.DatafileHandler): + datasource_id = 'build_gradle' + path_patterns = ('*/build.gradle', 'build.gradle.kts',) + # TODO: Not sure what the default type should be, change this to something + # more appropriate later + default_package_type = 'maven' + primary_language = 'Java' + description = 'Gradle build script' -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) + @classmethod + def parse(cls, location): + dependencies = get_dependencies(location) + return build_package(cls, dependencies) + + # TODO: handle complex cases of nested builds with many packages + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + cls.assign_package_to_parent_tree( + package=package, + resource=resource, + codebase=codebase, + ) grammar = """ @@ -49,6 +61,9 @@ def get_tokens(contents): + """ + Yield tuples of (position, Token, value) from lexing a ``contents`` string. + """ for i, (token, value) in enumerate(lex(contents, GroovyLexer())): yield i, token, value @@ -62,7 +77,9 @@ def get_pygmar_tokens(contents): def get_parse_tree(build_gradle_location): - # Open build.gradle and create a Pygmars parse tree from its contents + """ + Return a Pygmars parse tree from a ``build_gradle_location`` build.gradle + """ with open(build_gradle_location) as f: contents = f.read() parser = Parser(grammar, trace=0) @@ -75,11 +92,14 @@ def is_literal_string(string): def remove_quotes(string): """ - Remove starting and ending quotes from `string`. + Remove starting and ending quotes from ``string``. - If `string` has no starting or ending quotes, return `string`. + If ``string`` has no starting or ending quotes, return ``string``. """ - quoted = lambda x: (x.startswith('"') and x.endswith('"')) or (x.startswith("'") and x.endswith("'")) + quoted = lambda x: ( + (x.startswith('"') and x.endswith('"')) + or (x.startswith("'") and x.endswith("'")) + ) if quoted: return string[1:-1] else: @@ -261,7 +281,7 @@ def build_package(cls, dependencies): continue namespace = dependency.get('namespace', '') - version = dependency.get('version', '') + version = dependency.get('version', '') scope = dependency.get('scope', '') is_runtime = True is_optional = False @@ -272,7 +292,7 @@ def build_package(cls, dependencies): package_dependencies.append( models.DependentPackage( purl=PackageURL( - type='build.gradle', + type=cls.default_package_type, namespace=namespace, name=name, version=version @@ -284,22 +304,10 @@ def build_package(cls, dependencies): ) ) - yield cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=BuildGradleHandler.default_primary_language, dependencies=package_dependencies, ) - -@attr.s() -class BuildGradle(BaseBuildManifestPackageData, models.PackageDataFile): - file_patterns = ('build.gradle',) - extensions = ('.gradle',) - # TODO: Not sure what the default type should be, change this to something - # more appropriate later - default_type = 'build.gradle' - - @classmethod - def recognize(cls, location): - if not cls.is_package_data_file(location): - return - dependencies = get_dependencies(location) - return build_package(cls, dependencies) diff --git a/tests/packagedcode/data/build_gradle/end2end-expected.json b/tests/packagedcode/data/build_gradle/end2end-expected.json index 81659476073..7423c2a03a8 100644 --- a/tests/packagedcode/data/build_gradle/end2end-expected.json +++ b/tests/packagedcode/data/build_gradle/end2end-expected.json @@ -20,52 +20,56 @@ ], "dependencies": [ { - "purl": "pkg:build.gradle/com.google/guava@1.0", + "purl": "pkg:maven/com.google/guava@1.0", "extracted_requirement": "1.0", "scope": "api", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:build.gradle/com.google/guava@1.0", - "for_package": null, - "lockfile": "build.gradle" + "dependency_uid": "pkg:maven/com.google/guava@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "build.gradle", + "datasource_id": "build_gradle" }, { - "purl": "pkg:build.gradle/org.apache/commons@1.0", + "purl": "pkg:maven/org.apache/commons@1.0", "extracted_requirement": "1.0", "scope": "usageDependencies", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:build.gradle/org.apache/commons@1.0", - "for_package": null, - "lockfile": "build.gradle" + "dependency_uid": "pkg:maven/org.apache/commons@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "build.gradle", + "datasource_id": "build_gradle" }, { - "purl": "pkg:build.gradle/org.jacoco.ant@0.7.4.201502262128", + "purl": "pkg:maven/org.jacoco.ant@0.7.4.201502262128", "extracted_requirement": "0.7.4.201502262128", "scope": "", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:build.gradle/org.jacoco.ant@0.7.4.201502262128", - "for_package": null, - "lockfile": "build.gradle" + "dependency_uid": "pkg:maven/org.jacoco.ant@0.7.4.201502262128?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "build.gradle", + "datasource_id": "build_gradle" }, { - "purl": "pkg:build.gradle/org.jacoco.agent@0.7.4.201502262128", + "purl": "pkg:maven/org.jacoco.agent@0.7.4.201502262128", "extracted_requirement": "0.7.4.201502262128", "scope": "", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:build.gradle/org.jacoco.agent@0.7.4.201502262128", - "for_package": null, - "lockfile": "build.gradle" + "dependency_uid": "pkg:maven/org.jacoco.agent@0.7.4.201502262128?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "build.gradle", + "datasource_id": "build_gradle" } ], "packages": [], @@ -75,7 +79,7 @@ "type": "file", "package_data": [ { - "type": "build.gradle", + "type": "maven", "namespace": null, "name": null, "version": null, @@ -100,12 +104,12 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:build.gradle/com.google/guava@1.0", + "purl": "pkg:maven/com.google/guava@1.0", "extracted_requirement": "1.0", "scope": "api", "is_runtime": true, @@ -114,7 +118,7 @@ "resolved_package": {} }, { - "purl": "pkg:build.gradle/org.apache/commons@1.0", + "purl": "pkg:maven/org.apache/commons@1.0", "extracted_requirement": "1.0", "scope": "usageDependencies", "is_runtime": true, @@ -123,7 +127,7 @@ "resolved_package": {} }, { - "purl": "pkg:build.gradle/org.jacoco.ant@0.7.4.201502262128", + "purl": "pkg:maven/org.jacoco.ant@0.7.4.201502262128", "extracted_requirement": "0.7.4.201502262128", "scope": "", "is_runtime": true, @@ -132,7 +136,7 @@ "resolved_package": {} }, { - "purl": "pkg:build.gradle/org.jacoco.agent@0.7.4.201502262128", + "purl": "pkg:maven/org.jacoco.agent@0.7.4.201502262128", "extracted_requirement": "0.7.4.201502262128", "scope": "", "is_runtime": true, @@ -141,10 +145,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "build_gradle", + "purl": null } ], "for_packages": [], diff --git a/tests/packagedcode/test_build_gradle.py b/tests/packagedcode/test_build_gradle.py index f83d004a8ba..53ee219f843 100644 --- a/tests/packagedcode/test_build_gradle.py +++ b/tests/packagedcode/test_build_gradle.py @@ -12,6 +12,7 @@ from packagedcode import build_gradle from packagedcode import models from packages_test_utils import PackageTester +from packages_test_utils import compare_package_results from scancode.cli_test_utils import check_json_scan from scancode.cli_test_utils import run_scan_click from scancode_config import REGEN_TEST_FIXTURES @@ -25,18 +26,19 @@ def test_end2end_scan_can_detect_build_gradle(self): expected_file = self.get_test_loc('end2end-expected.json') result_file = self.get_temp_file() run_scan_click(['--package', test_file, '--json-pp', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) - def test_build_gradle_recognize(self): + def test_build_gradle_parse(self): test_file = self.get_test_loc('build.gradle') - result_packages = build_gradle.BuildGradle.recognize(test_file) + result_packages = build_gradle.BuildGradleHandler.parse(test_file) expected_packages = [ - build_gradle.BuildGradle( - type='build.gradle', + models.PackageData( + datasource_id='build_gradle', + type='maven', dependencies = [ models.DependentPackage( - purl='pkg:build.gradle/com.google/guava@1.0', + purl='pkg:maven/com.google/guava@1.0', extracted_requirement='1.0', scope='api', is_runtime=True, @@ -44,7 +46,7 @@ def test_build_gradle_recognize(self): is_resolved=False ), models.DependentPackage( - purl='pkg:build.gradle/org.apache/commons@1.0', + purl='pkg:maven/org.apache/commons@1.0', extracted_requirement='1.0', scope='usageDependencies', is_runtime=True, @@ -52,7 +54,7 @@ def test_build_gradle_recognize(self): is_resolved=False ), models.DependentPackage( - purl='pkg:build.gradle/org.jacoco.ant@0.7.4.201502262128', + purl='pkg:maven/org.jacoco.ant@0.7.4.201502262128', extracted_requirement='0.7.4.201502262128', scope='', is_runtime=True, @@ -60,7 +62,7 @@ def test_build_gradle_recognize(self): is_resolved=False ), models.DependentPackage( - purl='pkg:build.gradle/org.jacoco.agent@0.7.4.201502262128', + purl='pkg:maven/org.jacoco.agent@0.7.4.201502262128', extracted_requirement='0.7.4.201502262128', scope='', is_runtime=True, @@ -72,16 +74,3 @@ def test_build_gradle_recognize(self): ] compare_package_results(expected_packages, result_packages) - -def compare_package_results(expected, result): - # We don't want to compare `root_path`, since the result will always - # have a different `root_path` than the expected result - result_packages = [] - for result_package in result: - r = result_package.to_dict() - result_packages.append(r) - expected_packages = [] - for expected_package in expected: - e = expected_package.to_dict() - expected_packages.append(e) - assert result_packages == expected_packages From 66216d4d158f93dceee32fcf6b3f0b08bc3c1cf2 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:27:44 +0200 Subject: [PATCH 12/36] Adopt new handler design for Rust Cargo We now have separate handlers: * CargoTomlHandler * CargoLockHandler Adn we assemble these in a Package correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/cargo.py | 262 +++--- .../cargo_lock/sample1/output.expected.json | 19 +- .../cargo_lock/sample2/output.expected.json | 15 +- .../cargo_lock/sample3/output.expected.json | 15 +- .../cargo_lock/sample4/output.expected.json | 23 +- .../cargo_lock/sample5/output.expected.json | 23 +- .../cargo/cargo_toml/clap/Cargo.toml.expected | 11 +- .../cargo_toml/clippy/Cargo.toml.expected | 9 +- .../cargo_toml/mdbook/Cargo.toml.expected | 9 +- .../cargo_toml/rustfmt/Cargo.toml.expected | 9 +- .../data/cargo/cargo_toml/rustup/Cargo.toml.1 | 79 -- .../cargo_toml/rustup/Cargo.toml.expected | 11 +- .../data/cargo/lowercase/cargo.lock | 33 + .../data/cargo/lowercase/cargo.toml | 15 + .../data/cargo/scan.expected.json | 768 ++++++++++++++++++ tests/packagedcode/data/cargo/scan/Cargo.lock | 177 ++++ tests/packagedcode/data/cargo/scan/Cargo.toml | 40 + .../data/cargo/scan/dac/Cargo.toml | 35 + tests/packagedcode/test_cargo.py | 73 +- 19 files changed, 1334 insertions(+), 292 deletions(-) delete mode 100644 tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.1 create mode 100644 tests/packagedcode/data/cargo/lowercase/cargo.lock create mode 100644 tests/packagedcode/data/cargo/lowercase/cargo.toml create mode 100644 tests/packagedcode/data/cargo/scan.expected.json create mode 100644 tests/packagedcode/data/cargo/scan/Cargo.lock create mode 100644 tests/packagedcode/data/cargo/scan/Cargo.toml create mode 100644 tests/packagedcode/data/cargo/scan/dac/Cargo.toml diff --git a/src/packagedcode/cargo.py b/src/packagedcode/cargo.py index 2e358d180dd..76241487404 100644 --- a/src/packagedcode/cargo.py +++ b/src/packagedcode/cargo.py @@ -7,171 +7,206 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging import re -import attr -from packageurl import PackageURL +import saneyaml import toml +from packageurl import PackageURL -from commoncode import filetype -from commoncode import fileutils from packagedcode import models - """ Handle Rust cargo crates """ -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - -@attr.s() -class RustCargoCrate(models.PackageData): - default_type = 'cargo' +class CargoTomlHandler(models.DatafileHandler): + datasource_id = 'cargo_toml' + path_patterns = ('*/Cargo.toml', '*/cargo.toml',) + default_package_type = 'cargo' default_primary_language = 'Rust' - default_web_baseurl = 'https://crates.io' - default_download_baseurl = 'https://crates.io/api/v1' - default_api_baseurl = 'https://crates.io/api/v1' + description = 'Rust Cargo.toml package manifest' + documentation_url = 'https://doc.rust-lang.org/cargo/reference/manifest.html' @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - if self.name: - return '{}/crates/{}'.format(baseurl, self.name) - - def repository_download_url(self, baseurl=default_download_baseurl): - if self.name and self.version: - return '{}/crates/{}/{}/download'.format(baseurl, self.name, self.version) - - def api_data_url(self, baseurl=default_api_baseurl): - if self.name: - return '{}/crates/{}'.format(baseurl, self.name) - - -@attr.s() -class CargoToml(RustCargoCrate, models.PackageDataFile): - - file_patterns = ('Cargo.toml',) - extensions = ('.toml',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and fileutils.file_name(location).lower() == 'cargo.toml' - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): package_data = toml.load(location, _dict=dict) core_package_data = package_data.get('package', {}) + name = core_package_data.get('name') version = core_package_data.get('version') - description = core_package_data.get('description') - if description: - description = description.strip() + description = core_package_data.get('description') or '' + description = description.strip() - authors = core_package_data.get('authors') - parties = list(party_mapper(authors, party_role='author')) + authors = core_package_data.get('authors') or [] + parties = list(get_parties(person_names=authors, party_role='author')) declared_license = core_package_data.get('license') - - package = cls( + # TODO: load as a notice_text + license_file = core_package_data.get('license-file') + + keywords = core_package_data.get('keywords') or [] + categories = core_package_data.get('categories') or [] + keywords.extend(categories) + + # cargo dependencies are complex and can be overriden at multiple levels + dependencies = [] + for key, value in core_package_data.items(): + if key.endswith('dependencies'): + dependencies.extend(dependency_mapper(dependencies=value, scope=key)) + + # TODO: add file refs: + # - readme, include and exclude + # TODO: other URLs + # - documentation + + vcs_url = core_package_data.get('repository') + homepage_url = core_package_data.get('homepage') + repository_homepage_url = name and f'https://crates.io/crates/{name}' + repository_download_url = name and version and f'https://crates.io/api/v1/crates/{name}/{version}/download' + api_data_url = name and f'https://crates.io/api/v1/crates/{name}' + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, + primary_language=cls.default_primary_language, description=description, parties=parties, - declared_license=declared_license + declared_license=declared_license, + vcs_url=vcs_url, + homepage_url=homepage_url, + repository_homepage_url=repository_homepage_url, + repository_download_url=repository_download_url, + api_data_url=api_data_url, + dependencies=dependencies, ) - yield package - - -@attr.s() -class CargoLock(RustCargoCrate, models.PackageDataFile): - - file_patterns = ('Cargo.lock',) - extensions = ('.lock',) - @classmethod - def is_package_data_file(cls, location): + def assemble(cls, package_data, resource, codebase): """ - Return True if the file at ``location`` is likely a manifest of this type. + Assemble Cargo.toml and possible Cargo.lock datafiles """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == 'cargo.lock') + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=('Cargo.toml', 'cargo.toml', 'Cargo.lock', 'cargo.lock'), + directory=resource.parent(codebase), + codebase=codebase, + ) - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - package_data = toml.load(location, _dict=dict) - package_dependencies = [] - core_package_data = package_data.get('package', []) - for dep in core_package_data: - package_dependencies.append( +class CargoLockHandler(models.DatafileHandler): + datasource_id = 'cargo_lock' + path_patterns = ('*/Cargo.lock', '*/cargo.lock',) + default_package_type = 'cargo' + default_primary_language = 'Rust' + description = 'Rust Cargo.lock dependencies lockfile' + documentation_url = 'https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html' + + # TODO: also add extra package data found such as version control and commits + # [[package]] + # name = "ansi_term" + # version = "0.11.0" + # source = "registry+https://github.com/rust-lang/crates.io-index" + # checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" + # dependencies = [ + # "winapi", + # ] + + @classmethod + def parse(cls, location): + cargo_lock = toml.load(location, _dict=dict) + dependencies = [] + package = cargo_lock.get('package', []) + for dep in package: + # TODO: add missing "source" vs. "dependencies" and checksum + dependencies.append( models.DependentPackage( purl=PackageURL( - type='crates', + type='cargo', name=dep.get('name'), version=dep.get('version') ).to_string(), extracted_requirement=dep.get('version'), - scope='dependency', + scope='dependencies', is_runtime=True, is_optional=False, is_resolved=True, ) ) - - yield cls(dependencies=package_dependencies) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies, + ) -@attr.s() -class RustPackage(RustCargoCrate, models.Package): + @classmethod + def assemble(cls, package_data, resource, codebase): + """ + Assemble Cargo.toml and possible Cargo.lock datafiles + """ + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=('Cargo.toml', 'Cargo.lock',), + directory=resource.parent(codebase), + codebase=codebase, + ) + + +def dependency_mapper(dependencies, scope='dependencies'): """ - A Rust Package that is created out of one/multiple rust package - manifests and package-like data, with it's files. + Yield DependentPackage collected from a list of cargo dependencies """ - - @property - def manifests(self): - return [ - CargoToml, - CargoLock - ] + is_runtime = not scope.endswith(('dev-dependencies', 'build-dependencies')) + for name, requirement in dependencies.items(): + if isinstance(requirement, str): + # plain version requirement + is_optional = False + elif isinstance(requirement, dict): + # complex requirement, with more than version are harder to handle + # so we just dump + is_optional = requirement.pop('optional', False) + requirement = saneyaml.dump(requirement) + + yield models.DependentPackage( + purl=PackageURL( + type='cargo', + name=name, + ).to_string(), + extracted_requirement=requirement, + scope=scope, + is_runtime=is_runtime, + is_optional=is_optional, + is_resolved=False, + ) -def party_mapper(party, party_role): +def get_parties(person_names, party_role): """ - Yields a Party object with party of `party_role`. + Yields Party of `party_role` given a list of ``person_names`` strings. https://doc.rust-lang.org/cargo/reference/manifest.html#the-authors-field-optional """ - for person in party: - name, email = parse_person(person) + for person_name in person_names: + name, email = parse_person(person_name) yield models.Party( type=models.party_person, name=name, role=party_role, - email=email) + email=email, + ) + + +person_parser = re.compile( + r'^(?P[^\(<]+)' + r'\s?' + r'(?P<([^>]+)>)?' +).match + +person_parser_no_name = re.compile( + r'(?P<([^>]+)>)?' +).match def parse_person(person): @@ -206,14 +241,3 @@ def parse_person(person): email = email.strip('<> ') return name, email - - -person_parser = re.compile( - r'^(?P[^\(<]+)' - r'\s?' - r'(?P<([^>]+)>)?' -).match - -person_parser_no_name = re.compile( - r'(?P<([^>]+)>)?' -).match diff --git a/tests/packagedcode/data/cargo/cargo_lock/sample1/output.expected.json b/tests/packagedcode/data/cargo/cargo_lock/sample1/output.expected.json index 6575b12b78f..758e9385917 100644 --- a/tests/packagedcode/data/cargo/cargo_lock/sample1/output.expected.json +++ b/tests/packagedcode/data/cargo/cargo_lock/sample1/output.expected.json @@ -25,41 +25,42 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:crates/autocfg@1.0.0", + "purl": "pkg:cargo/autocfg@1.0.0", "extracted_requirement": "1.0.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/cargo-lock@4.0.1", + "purl": "pkg:cargo/cargo-lock@4.0.1", "extracted_requirement": "4.0.1", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/gumdrop@0.7.0", + "purl": "pkg:cargo/gumdrop@0.7.0", "extracted_requirement": "0.7.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_lock/sample2/output.expected.json b/tests/packagedcode/data/cargo/cargo_lock/sample2/output.expected.json index 504c0ae338c..8ba0edf9b5f 100644 --- a/tests/packagedcode/data/cargo/cargo_lock/sample2/output.expected.json +++ b/tests/packagedcode/data/cargo/cargo_lock/sample2/output.expected.json @@ -25,32 +25,33 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:crates/autocfg@1.0.0", + "purl": "pkg:cargo/autocfg@1.0.0", "extracted_requirement": "1.0.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/fixedbitset@0.2.0", + "purl": "pkg:cargo/fixedbitset@0.2.0", "extracted_requirement": "0.2.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_lock/sample3/output.expected.json b/tests/packagedcode/data/cargo/cargo_lock/sample3/output.expected.json index 04e0b56228c..597ee6d24c8 100644 --- a/tests/packagedcode/data/cargo/cargo_lock/sample3/output.expected.json +++ b/tests/packagedcode/data/cargo/cargo_lock/sample3/output.expected.json @@ -25,32 +25,33 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:crates/gumdrop@0.7.0", + "purl": "pkg:cargo/gumdrop@0.7.0", "extracted_requirement": "0.7.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/gumdrop_derive@0.7.0", + "purl": "pkg:cargo/gumdrop_derive@0.7.0", "extracted_requirement": "0.7.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_lock/sample4/output.expected.json b/tests/packagedcode/data/cargo/cargo_lock/sample4/output.expected.json index 3e49be89958..c2014a00fe2 100644 --- a/tests/packagedcode/data/cargo/cargo_lock/sample4/output.expected.json +++ b/tests/packagedcode/data/cargo/cargo_lock/sample4/output.expected.json @@ -25,50 +25,51 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:crates/idna@0.2.0", + "purl": "pkg:cargo/idna@0.2.0", "extracted_requirement": "0.2.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/indexmap@1.3.2", + "purl": "pkg:cargo/indexmap@1.3.2", "extracted_requirement": "1.3.2", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/matches@0.1.8", + "purl": "pkg:cargo/matches@0.1.8", "extracted_requirement": "0.1.8", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/percent-encoding@2.1.0", + "purl": "pkg:cargo/percent-encoding@2.1.0", "extracted_requirement": "2.1.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_lock/sample5/output.expected.json b/tests/packagedcode/data/cargo/cargo_lock/sample5/output.expected.json index 5f0f0e087b1..ef5d67158e5 100644 --- a/tests/packagedcode/data/cargo/cargo_lock/sample5/output.expected.json +++ b/tests/packagedcode/data/cargo/cargo_lock/sample5/output.expected.json @@ -25,50 +25,51 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { - "purl": "pkg:crates/indexmap@1.3.2", + "purl": "pkg:cargo/indexmap@1.3.2", "extracted_requirement": "1.3.2", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/matches@0.1.8", + "purl": "pkg:cargo/matches@0.1.8", "extracted_requirement": "0.1.8", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/semver@0.10.0", + "purl": "pkg:cargo/semver@0.10.0", "extracted_requirement": "0.10.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} }, { - "purl": "pkg:crates/semver-parser@0.7.0", + "purl": "pkg:cargo/semver-parser@0.7.0", "extracted_requirement": "0.7.0", - "scope": "dependency", + "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_toml/clap/Cargo.toml.expected b/tests/packagedcode/data/cargo/cargo_toml/clap/Cargo.toml.expected index 268de877d70..40c03b2cb21 100644 --- a/tests/packagedcode/data/cargo/cargo_toml/clap/Cargo.toml.expected +++ b/tests/packagedcode/data/cargo/cargo_toml/clap/Cargo.toml.expected @@ -19,7 +19,7 @@ } ], "keywords": [], - "homepage_url": null, + "homepage_url": "https://clap.rs/", "download_url": null, "size": null, "sha1": null, @@ -28,18 +28,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/clap-rs/clap", "copyright": null, "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/clap@2.32.0", "repository_homepage_url": "https://crates.io/crates/clap", "repository_download_url": "https://crates.io/api/v1/crates/clap/2.32.0/download", - "api_data_url": "https://crates.io/api/v1/crates/clap" + "api_data_url": "https://crates.io/api/v1/crates/clap", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/clap@2.32.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_toml/clippy/Cargo.toml.expected b/tests/packagedcode/data/cargo/cargo_toml/clippy/Cargo.toml.expected index bb34eaa62e5..4eacda6d15b 100644 --- a/tests/packagedcode/data/cargo/cargo_toml/clippy/Cargo.toml.expected +++ b/tests/packagedcode/data/cargo/cargo_toml/clippy/Cargo.toml.expected @@ -56,18 +56,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/rust-lang/rust-clippy", "copyright": null, "license_expression": "mit OR apache-2.0", "declared_license": "MIT/Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/clippy@0.0.212", "repository_homepage_url": "https://crates.io/crates/clippy", "repository_download_url": "https://crates.io/api/v1/crates/clippy/0.0.212/download", - "api_data_url": "https://crates.io/api/v1/crates/clippy" + "api_data_url": "https://crates.io/api/v1/crates/clippy", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/clippy@0.0.212" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_toml/mdbook/Cargo.toml.expected b/tests/packagedcode/data/cargo/cargo_toml/mdbook/Cargo.toml.expected index ecac77aa4ff..c438faf3d50 100644 --- a/tests/packagedcode/data/cargo/cargo_toml/mdbook/Cargo.toml.expected +++ b/tests/packagedcode/data/cargo/cargo_toml/mdbook/Cargo.toml.expected @@ -42,18 +42,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/rust-lang-nursery/mdBook", "copyright": null, "license_expression": "mpl-2.0", "declared_license": "MPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/mdbook@0.2.4-alpha.0", "repository_homepage_url": "https://crates.io/crates/mdbook", "repository_download_url": "https://crates.io/api/v1/crates/mdbook/0.2.4-alpha.0/download", - "api_data_url": "https://crates.io/api/v1/crates/mdbook" + "api_data_url": "https://crates.io/api/v1/crates/mdbook", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/mdbook@0.2.4-alpha.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_toml/rustfmt/Cargo.toml.expected b/tests/packagedcode/data/cargo/cargo_toml/rustfmt/Cargo.toml.expected index 697d92952c4..c24f3f1f08b 100644 --- a/tests/packagedcode/data/cargo/cargo_toml/rustfmt/Cargo.toml.expected +++ b/tests/packagedcode/data/cargo/cargo_toml/rustfmt/Cargo.toml.expected @@ -35,18 +35,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/rust-lang/rustfmt", "copyright": null, "license_expression": "apache-2.0 OR mit", "declared_license": "Apache-2.0/MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/rustfmt-nightly@1.0.3", "repository_homepage_url": "https://crates.io/crates/rustfmt-nightly", "repository_download_url": "https://crates.io/api/v1/crates/rustfmt-nightly/1.0.3/download", - "api_data_url": "https://crates.io/api/v1/crates/rustfmt-nightly" + "api_data_url": "https://crates.io/api/v1/crates/rustfmt-nightly", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/rustfmt-nightly@1.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.1 b/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.1 deleted file mode 100644 index b5485de2283..00000000000 --- a/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.1 +++ /dev/null @@ -1,79 +0,0 @@ -[package] - -name = "rustup" -version = "1.17.0" -edition = "2018" -authors = [ "Diggory Blake " ] -description = "Manage multiple rust installations with ease" - -documentation = "http://rust-lang.github.io/rustup.rs/rustup/index.html" -homepage = "https://github.com/rust-lang/rustup.rs" -repository = "https://github.com/rust-lang/rustup.rs" - -readme = "README.md" - -keywords = ["rustup", "multirust", "install", "proxy"] - -license = "MIT OR Apache-2.0" - -build = "build.rs" - -[features] - -default = ["curl-backend", "reqwest-backend"] - -curl-backend = ["download/curl-backend"] -reqwest-backend = ["download/reqwest-backend"] -vendored-openssl = ['openssl/vendored'] - -# Include in the default set to disable self-update and uninstall. -no-self-update = [] - -[dependencies] -rustup-dist = { path = "src/rustup-dist" } -rustup-utils = { path = "src/rustup-utils" } -download = { path = "src/download" } -clap = "2.18.0" -error-chain = "0.12.0" -itertools = "0.7.6" -libc = "0.2.0" -markdown = "0.2" -rand = "0.5.2" -regex = "1.0.1" -remove_dir_all = "0.5.1" -same-file = "1.0" -scopeguard = "0.3" -sha2 = "0.7.0" -tempdir = "0.3.4" -term = "0.5.1" -time = "0.1.34" -toml = "0.4" -url = "1.1.0" -wait-timeout = "0.1.5" -openssl = { version = '0.10.15', optional = true } - -[target."cfg(windows)".dependencies] -winapi = { version = "0.3", features = ["jobapi", "jobapi2", "processthreadsapi", "psapi", "synchapi", "winuser"] } -winreg = "0.5.0" -gcc = "0.3.50" - -[dev-dependencies] -rustup-mock = { path = "src/rustup-mock", version = "1.1.0" } -lazy_static = "1.0.0" - -[workspace] -members = ["src/download"] - -[lib] -name = "rustup" -path = "src/rustup/lib.rs" -test = false # no unit tests - -[[bin]] -name = "rustup-init" -path = "src/rustup-cli/main.rs" -test = false # no unit tests - -[profile.release] -lto = true -codegen-units = 1 diff --git a/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.expected b/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.expected index 1ae70ee2b6a..2f4019ce2c5 100644 --- a/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.expected +++ b/tests/packagedcode/data/cargo/cargo_toml/rustup/Cargo.toml.expected @@ -19,7 +19,7 @@ } ], "keywords": [], - "homepage_url": null, + "homepage_url": "https://github.com/rust-lang/rustup.rs", "download_url": null, "size": null, "sha1": null, @@ -28,18 +28,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/rust-lang/rustup.rs", "copyright": null, "license_expression": "mit OR apache-2.0", "declared_license": "MIT OR Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/rustup@1.17.0", "repository_homepage_url": "https://crates.io/crates/rustup", "repository_download_url": "https://crates.io/api/v1/crates/rustup/1.17.0/download", - "api_data_url": "https://crates.io/api/v1/crates/rustup" + "api_data_url": "https://crates.io/api/v1/crates/rustup", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/rustup@1.17.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/lowercase/cargo.lock b/tests/packagedcode/data/cargo/lowercase/cargo.lock new file mode 100644 index 00000000000..dc507a06aa1 --- /dev/null +++ b/tests/packagedcode/data/cargo/lowercase/cargo.lock @@ -0,0 +1,33 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler32" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" + +[[package]] +name = "aes" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9" +dependencies = [ + "aes-soft", + "aesni", + "block-cipher-trait", +] + +[[package]] +name = "zip" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df134e83b8f0f8153a094c7b0fd79dfebe437f1d76e7715afa18ed95ebe2fd7" +dependencies = [ + "bzip2", + "crc32fast", + "flate2", + "podio", + "time", +] diff --git a/tests/packagedcode/data/cargo/lowercase/cargo.toml b/tests/packagedcode/data/cargo/lowercase/cargo.toml new file mode 100644 index 00000000000..5be9f8e00a9 --- /dev/null +++ b/tests/packagedcode/data/cargo/lowercase/cargo.toml @@ -0,0 +1,15 @@ +[package] +name = 'bkg-cli-log' +edition = '2021' +categories = ['command-line-utilities', 'development-tools::debugging'] +keywords = ['logging'] +description = 'Simple logger for command line applications' +license = 'Apache-2.0' +version = '0.2.0' +repository = 'https://github.com/kalkin/rust-bkg-cli-log' + +[lib] +name = 'cli_log' + +[dependencies] +log = '0.4' diff --git a/tests/packagedcode/data/cargo/scan.expected.json b/tests/packagedcode/data/cargo/scan.expected.json new file mode 100644 index 00000000000..73f806e9d46 --- /dev/null +++ b/tests/packagedcode/data/cargo/scan.expected.json @@ -0,0 +1,768 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 3 + } + } + ], + "dependencies": [ + { + "purl": "pkg:cargo/ahash@0.7.4", + "extracted_requirement": "0.7.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/ahash@0.7.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/autocfg@1.0.1", + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/autocfg@1.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/cfg-if@0.1.10", + "extracted_requirement": "0.1.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/cfg-if@0.1.10?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/cfg-if@1.0.0", + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/cfg-if@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/chrono@0.4.19", + "extracted_requirement": "0.4.19", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/chrono@0.4.19?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/getrandom@0.2.3", + "extracted_requirement": "0.2.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/getrandom@0.2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/hashbrown@0.11.2", + "extracted_requirement": "0.11.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/hashbrown@0.11.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/libc@0.2.97", + "extracted_requirement": "0.2.97", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/libc@0.2.97?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/log@0.4.14", + "extracted_requirement": "0.4.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/log@0.4.14?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/memory_units@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/memory_units@0.4.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/num-integer@0.1.44", + "extracted_requirement": "0.1.44", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/num-integer@0.1.44?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/num-traits@0.2.14", + "extracted_requirement": "0.2.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/num-traits@0.2.14?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/once_cell@1.8.0", + "extracted_requirement": "1.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/once_cell@1.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/proxy-wasm@0.1.4", + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/proxy-wasm@0.1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/time@0.1.43", + "extracted_requirement": "0.1.43", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/time@0.1.43?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/version_check@0.9.3", + "extracted_requirement": "0.9.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/version_check@0.9.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/wasi@0.10.2%2Bwasi-snapshot-preview1", + "extracted_requirement": "0.10.2+wasi-snapshot-preview1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/wasi@0.10.2%2Bwasi-snapshot-preview1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/wee_alloc@0.4.5", + "extracted_requirement": "0.4.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/wee_alloc@0.4.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/winapi@0.3.9", + "extracted_requirement": "0.3.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/winapi@0.3.9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/winapi-i686-pc-windows-gnu@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/winapi-i686-pc-windows-gnu@0.4.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + }, + { + "purl": "pkg:cargo/winapi-x86_64-pc-windows-gnu@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:cargo/winapi-x86_64-pc-windows-gnu@0.4.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/Cargo.lock", + "datasource_id": "cargo_lock" + } + ], + "packages": [ + { + "type": "cargo", + "namespace": null, + "name": "apple-xar", + "version": "0.4.0-pre", + "qualifiers": {}, + "subpath": null, + "primary_language": "Rust", + "description": "XAR archive reading and writing", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Gregory Szorc", + "email": "gregory.szorc@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/indygreg/PyOxidizer", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/indygreg/PyOxidizer.git", + "copyright": null, + "license_expression": "mpl-2.0", + "declared_license": "MPL-2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://crates.io/crates/apple-xar", + "repository_download_url": "https://crates.io/api/v1/crates/apple-xar/0.4.0-pre/download", + "api_data_url": "https://crates.io/api/v1/crates/apple-xar", + "package_uid": "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/Cargo.toml" + ], + "datasource_ids": [ + "cargo_toml" + ], + "purl": "pkg:cargo/apple-xar@0.4.0-pre" + }, + { + "type": "cargo", + "namespace": null, + "name": "daachorse", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Rust", + "description": "Daachorse: Double-Array Aho-Corasick", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Koichi Akabe", + "email": "vbkaisetsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "author", + "name": "Shunsuke Kanda", + "email": "shnsk.knd@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/daac-tools/daachorse", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/daac-tools/daachorse", + "copyright": null, + "license_expression": "mit OR apache-2.0", + "declared_license": "MIT OR Apache-2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://crates.io/crates/daachorse", + "repository_download_url": "https://crates.io/api/v1/crates/daachorse/0.4.1/download", + "api_data_url": "https://crates.io/api/v1/crates/daachorse", + "package_uid": "pkg:cargo/daachorse@0.4.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/dac/Cargo.toml" + ], + "datasource_ids": [ + "cargo_toml" + ], + "purl": "pkg:cargo/daachorse@0.4.1" + } + ], + "files": [ + { + "path": "scan", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/Cargo.lock", + "type": "file", + "package_data": [ + { + "type": "cargo", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Rust", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:cargo/ahash@0.7.4", + "extracted_requirement": "0.7.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/autocfg@1.0.1", + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/cfg-if@0.1.10", + "extracted_requirement": "0.1.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/cfg-if@1.0.0", + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/chrono@0.4.19", + "extracted_requirement": "0.4.19", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/getrandom@0.2.3", + "extracted_requirement": "0.2.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/hashbrown@0.11.2", + "extracted_requirement": "0.11.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/libc@0.2.97", + "extracted_requirement": "0.2.97", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/log@0.4.14", + "extracted_requirement": "0.4.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/memory_units@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/num-integer@0.1.44", + "extracted_requirement": "0.1.44", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/num-traits@0.2.14", + "extracted_requirement": "0.2.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/once_cell@1.8.0", + "extracted_requirement": "1.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/proxy-wasm@0.1.4", + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/time@0.1.43", + "extracted_requirement": "0.1.43", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/version_check@0.9.3", + "extracted_requirement": "0.9.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/wasi@0.10.2%2Bwasi-snapshot-preview1", + "extracted_requirement": "0.10.2+wasi-snapshot-preview1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/wee_alloc@0.4.5", + "extracted_requirement": "0.4.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/winapi@0.3.9", + "extracted_requirement": "0.3.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/winapi-i686-pc-windows-gnu@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:cargo/winapi-x86_64-pc-windows-gnu@0.4.0", + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cargo_lock", + "purl": null + } + ], + "for_packages": [ + "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/Cargo.toml", + "type": "file", + "package_data": [ + { + "type": "cargo", + "namespace": null, + "name": "apple-xar", + "version": "0.4.0-pre", + "qualifiers": {}, + "subpath": null, + "primary_language": "Rust", + "description": "XAR archive reading and writing", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Gregory Szorc", + "email": "gregory.szorc@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/indygreg/PyOxidizer", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/indygreg/PyOxidizer.git", + "copyright": null, + "license_expression": null, + "declared_license": "MPL-2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://crates.io/crates/apple-xar", + "repository_download_url": "https://crates.io/api/v1/crates/apple-xar/0.4.0-pre/download", + "api_data_url": "https://crates.io/api/v1/crates/apple-xar", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/apple-xar@0.4.0-pre" + } + ], + "for_packages": [ + "pkg:cargo/apple-xar@0.4.0-pre?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/dac", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/dac/Cargo.toml", + "type": "file", + "package_data": [ + { + "type": "cargo", + "namespace": null, + "name": "daachorse", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Rust", + "description": "Daachorse: Double-Array Aho-Corasick", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Koichi Akabe", + "email": "vbkaisetsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "author", + "name": "Shunsuke Kanda", + "email": "shnsk.knd@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/daac-tools/daachorse", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/daac-tools/daachorse", + "copyright": null, + "license_expression": null, + "declared_license": "MIT OR Apache-2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://crates.io/crates/daachorse", + "repository_download_url": "https://crates.io/api/v1/crates/daachorse/0.4.1/download", + "api_data_url": "https://crates.io/api/v1/crates/daachorse", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/daachorse@0.4.1" + } + ], + "for_packages": [ + "pkg:cargo/daachorse@0.4.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cargo/scan/Cargo.lock b/tests/packagedcode/data/cargo/scan/Cargo.lock new file mode 100644 index 00000000000..dd8a6a2204b --- /dev/null +++ b/tests/packagedcode/data/cargo/scan/Cargo.lock @@ -0,0 +1,177 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "ahash" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "libc" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "proxy-wasm" +version = "0.1.4" +dependencies = [ + "cfg-if 1.0.0", + "chrono", + "getrandom", + "hashbrown", + "log", + "wee_alloc", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wee_alloc" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "memory_units", + "winapi", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/tests/packagedcode/data/cargo/scan/Cargo.toml b/tests/packagedcode/data/cargo/scan/Cargo.toml new file mode 100644 index 00000000000..1bcb19cfab8 --- /dev/null +++ b/tests/packagedcode/data/cargo/scan/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "apple-xar" +version = "0.4.0-pre" +authors = ["Gregory Szorc "] +edition = "2021" +license = "MPL-2.0" +description = "XAR archive reading and writing" +keywords = ["apple", "xar"] +homepage = "https://github.com/indygreg/PyOxidizer" +repository = "https://github.com/indygreg/PyOxidizer.git" +readme = "README.md" + +[dependencies] +base64 = "0.13" +bcder = "0.6" +bzip2 = "0.4" +chrono = { version = "0.4", features = ["serde"] } +digest = "0.10" +log = "0.4" +md-5 = "0.10" +flate2 = "1.0" +rand = "0.8" +reqwest = { version = "0.11", default-features = false } +scroll = { version = "0.11", features = ["derive"] } +serde-xml-rs = "0.5" +serde = { version = "1.0", features = ["derive"] } +sha1 = "0.10" +sha2 = "0.10" +thiserror = "1.0" +url = "2.2" +xml-rs = "0.8" +xz2 = "0.1" + +[dependencies.cryptographic-message-syntax] +path = "../cryptographic-message-syntax" +version = "0.15.0-pre" + +[dependencies.x509-certificate] +path = "../x509-certificate" +version = "0.13.0-pre" diff --git a/tests/packagedcode/data/cargo/scan/dac/Cargo.toml b/tests/packagedcode/data/cargo/scan/dac/Cargo.toml new file mode 100644 index 00000000000..1868d7e6214 --- /dev/null +++ b/tests/packagedcode/data/cargo/scan/dac/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "daachorse" +version = "0.4.1" +edition = "2021" +authors = [ + "Koichi Akabe ", + "Shunsuke Kanda ", +] +description = "Daachorse: Double-Array Aho-Corasick" +license = "MIT OR Apache-2.0" +homepage = "https://github.com/daac-tools/daachorse" +repository = "https://github.com/daac-tools/daachorse" +readme = "README.md" +keywords = ["search", "text", "aho", "multi", "double-array"] +categories = ["text-processing", "algorithms", "data-structures", "no-std"] +exclude = [".*"] + +[dependencies] + +[dev-dependencies] + +[features] +default = ["std"] + +std = [] + +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + +[workspace] +members = [ + "bench", + "daacfind", +] diff --git a/tests/packagedcode/test_cargo.py b/tests/packagedcode/test_cargo.py index 1fec3e08cf7..1184421262b 100644 --- a/tests/packagedcode/test_cargo.py +++ b/tests/packagedcode/test_cargo.py @@ -13,79 +13,96 @@ from packagedcode import cargo from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES - +from scancode.cli_test_utils import run_scan_click +from scancode.cli_test_utils import check_json_scan class TestCargo(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') - def test_is_manifest_cargo_toml(self): + def test_is_datafile_cargo_toml(self): test_file = self.get_test_loc('cargo/cargo_toml/clap/Cargo.toml') - assert cargo.CargoToml.is_package_data_file(test_file) + assert cargo.CargoTomlHandler.is_datafile(test_file) + + def test_is_datafile_cargo_lock(self): + test_file = self.get_test_loc('cargo/cargo_lock/sample1/Cargo.lock') + assert cargo.CargoLockHandler.is_datafile(test_file) + + def test_is_datafile_accepts_lowercase_cargo_toml_and_cargo_lock(self): + test_file = self.get_test_loc('cargo/lowercase/cargo.toml') + assert cargo.CargoTomlHandler.is_datafile(test_file) + + test_file = self.get_test_loc('cargo/lowercase/cargo.lock') + assert cargo.CargoLockHandler.is_datafile(test_file) def test_parse_cargo_toml_clap(self): test_file = self.get_test_loc('cargo/cargo_toml/clap/Cargo.toml') expected_loc = self.get_test_loc('cargo/cargo_toml/clap/Cargo.toml.expected') - package = cargo.CargoToml.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoTomlHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_toml_clippy(self): test_file = self.get_test_loc('cargo/cargo_toml/clippy/Cargo.toml') expected_loc = self.get_test_loc('cargo/cargo_toml/clippy/Cargo.toml.expected') - package = cargo.CargoToml.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoTomlHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_toml_mdbook(self): test_file = self.get_test_loc('cargo/cargo_toml/mdbook/Cargo.toml') expected_loc = self.get_test_loc('cargo/cargo_toml/mdbook/Cargo.toml.expected') - package = cargo.CargoToml.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoTomlHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_toml_rustfmt(self): test_file = self.get_test_loc('cargo/cargo_toml/rustfmt/Cargo.toml') expected_loc = self.get_test_loc('cargo/cargo_toml/rustfmt/Cargo.toml.expected') - package = cargo.CargoToml.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoTomlHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_toml_rustup(self): test_file = self.get_test_loc('cargo/cargo_toml/rustup/Cargo.toml') expected_loc = self.get_test_loc('cargo/cargo_toml/rustup/Cargo.toml.expected') - package = cargo.CargoToml.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) - - def test_is_manifest_cargo_lock(self): - test_file = self.get_test_loc('cargo/cargo_lock/sample1/Cargo.lock') - assert cargo.CargoLock.is_package_data_file(test_file) + packages_data = cargo.CargoTomlHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_lock_sample1(self): test_file = self.get_test_loc('cargo/cargo_lock/sample1/Cargo.lock') expected_loc = self.get_test_loc('cargo/cargo_lock/sample1/output.expected.json') - package = cargo.CargoLock.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoLockHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_lock_sample2(self): test_file = self.get_test_loc('cargo/cargo_lock/sample2/Cargo.lock') expected_loc = self.get_test_loc('cargo/cargo_lock/sample2/output.expected.json') - package = cargo.CargoLock.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoLockHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_lock_sample3(self): test_file = self.get_test_loc('cargo/cargo_lock/sample3/Cargo.lock') expected_loc = self.get_test_loc('cargo/cargo_lock/sample3/output.expected.json') - package = cargo.CargoLock.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoLockHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_lock_sample4(self): test_file = self.get_test_loc('cargo/cargo_lock/sample4/Cargo.lock') expected_loc = self.get_test_loc('cargo/cargo_lock/sample4/output.expected.json') - package = cargo.CargoLock.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoLockHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_cargo_lock_sample5(self): test_file = self.get_test_loc('cargo/cargo_lock/sample5/Cargo.lock') expected_loc = self.get_test_loc('cargo/cargo_lock/sample5/output.expected.json') - package = cargo.CargoLock.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + packages_data = cargo.CargoLockHandler.parse(test_file) + self.check_packages_data(packages_data, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_scan_cli_works(self): + test_file = self.get_test_loc('cargo/scan') + expected_file = self.get_test_loc('cargo/scan.expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES + ) PERSON_PARSER_TEST_TABLE = [ @@ -100,7 +117,9 @@ def test_parse_cargo_lock_sample5(self): ('', (None, '')), ] + class TestRegex(object): + @pytest.mark.parametrize('person, expected_person', PERSON_PARSER_TEST_TABLE) def test_person_parser(self, person, expected_person): parsed_person = cargo.person_parser(person) From 2813a7fa3cbd3bdbd2c71358484ffb3135ee6cf4 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:30:23 +0200 Subject: [PATCH 13/36] Adopt new handler design for chef cookbooks We now have separate handlers: * ChefCookbookHandler * ChefMetadataJsonHandler * ChefMetadataRbHandler Adn we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/chef.py | 203 ++++++++------- .../data/chef/basic/metadata.json.expected | 9 +- .../data/chef/basic/metadata.rb.expected | 9 +- .../chef/basic/test_package.json.expected | 9 +- ...iew_url_and_bug_tracking_url.json.expected | 9 +- .../test_package_dependencies.json.expected | 9 +- .../basic/test_package_parties.json.expected | 9 +- .../chef/dependencies/metadata.rb.expected | 9 +- .../data/chef/package.scan.expected.json | 236 ++++++++++++++++++ tests/packagedcode/test_chef.py | 74 ++++-- 10 files changed, 428 insertions(+), 148 deletions(-) create mode 100644 tests/packagedcode/data/chef/package.scan.expected.json diff --git a/src/packagedcode/chef.py b/src/packagedcode/chef.py index b4c48aeaaca..17f8401c7d9 100644 --- a/src/packagedcode/chef.py +++ b/src/packagedcode/chef.py @@ -10,23 +10,19 @@ import json import logging -import attr +from commoncode import fileutils from packageurl import PackageURL from pygments import highlight from pygments.formatter import Formatter -from pygments.lexers import RubyLexer +from pygments.lexers.ruby import RubyLexer from pygments.token import Token -from commoncode import filetype -from commoncode import fileutils from packagedcode import models - """ Handle Chef cookbooks """ - TRACE = False logger = logging.getLogger(__name__) @@ -37,31 +33,7 @@ logger.setLevel(logging.DEBUG) -@attr.s() -class ChefPackageData(models.PackageData): - filetypes = ('.tgz',) - mimetypes = ('application/x-tar',) - default_type = 'chef' - default_primary_language = 'Ruby' - default_web_baseurl = 'https://supermarket.chef.io/cookbooks' - default_download_baseurl = 'https://supermarket.chef.io/cookbooks' - default_api_baseurl = 'https://supermarket.chef.io/api/v1' - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_download_url(self, baseurl=default_download_baseurl): - return chef_download_url(self.name, self.version, registry=baseurl) - - def api_data_url(self, baseurl=default_api_baseurl): - return chef_api_url(self.name, self.version, registry=baseurl) - - def compute_normalized_license(self): - return models.compute_normalized_license(self.declared_license) - - -def chef_download_url(name, version, registry='https://supermarket.chef.io/cookbooks'): +def chef_download_url(name, version): """ Return an Chef cookbook download url given a name, version, and base registry URL. @@ -69,11 +41,10 @@ def chef_download_url(name, version, registry='https://supermarket.chef.io/cookb >>> c = chef_download_url('seven_zip', '1.0.4') >>> assert c == u'https://supermarket.chef.io/cookbooks/seven_zip/versions/1.0.4/download' """ - registry = registry.rstrip('/') - return '{registry}/{name}/versions/{version}/download'.format(**locals()) + return name and version and f'https://supermarket.chef.io/cookbooks/{name}/versions/{version}/download' -def chef_api_url(name, version, registry='https://supermarket.chef.io/api/v1'): +def chef_api_url(name, version): """ Return a package API data URL given a name, version and a base registry URL. @@ -81,8 +52,21 @@ def chef_api_url(name, version, registry='https://supermarket.chef.io/api/v1'): >>> c = chef_api_url('seven_zip', '1.0.4') >>> assert c == u'https://supermarket.chef.io/api/v1/cookbooks/seven_zip/versions/1.0.4' """ - registry = registry.rstrip('/') - return '{registry}/cookbooks/{name}/versions/{version}'.format(**locals()) + return name and version and f'https://supermarket.chef.io/api/v1/cookbooks/{name}/versions/{version}' + + +def get_urls(name, version): + """ + Return a mapping of URLs given a name and version. + """ + dnl = chef_download_url(name, version) + rhu = name and version and f'https://supermarket.chef.io/cookbooks/{name}/versions/{version}/' + return dict( + download_url=dnl, + repository_download_url=dnl, + repository_homepage_url=rhu, + api_data_url=chef_api_url(name, version), + ) class ChefMetadataFormatter(Formatter): @@ -155,93 +139,89 @@ def format(self, tokens, outfile): json.dump(metadata, outfile) -@attr.s() -class MetadataJson(ChefPackageData, models.PackageDataFile): - - file_patterns = ('metadata.json',) - extensions = ('.json',) +class BaseChefMetadataHandler(models.DatafileHandler): @classmethod - def is_package_data_file(cls, location): + def assemble(cls, package_data, resource, codebase): """ - Return True if `location` path is for a Chef metadata.json file. - The metadata.json is also used in Python installed packages in a 'dist-info' - directory. + Assemble Package from Chef metadata.rb, then from metadata.json files. """ - return ( - filetype.is_file(location) - and fileutils.file_name(location).lower() == 'metadata.json' - and not fileutils.file_name(fileutils.parent_directory(location)) - .lower().endswith('dist-info') + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=('metadata.rb', 'metadata.json',), + directory=resource.parent(codebase), + codebase=codebase, ) - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - with io.open(location, encoding='utf-8') as loc: - package_data = json.load(loc) - return build_package(cls, package_data) +# TODO: implemet me: extract and parse and register +class ChefCookbookHandler(BaseChefMetadataHandler): + datasource_id = 'chef_cookbook_tarball' + path_patterns = ('*.tgz',) + default_package_type = 'chef' + default_primary_language = 'Ruby' + description = 'Chef cookbook tarball' -@attr.s() -class Metadatarb(ChefPackageData, models.PackageDataFile): - file_patterns = ('metadata.rb',) - extensions = ('.rb',) +class ChefMetadataJsonHandler(BaseChefMetadataHandler): + datasource_id = 'chef_cookbook_metadata_json' + path_patterns = ('*/metadata.json',) + default_package_type = 'chef' + default_primary_language = 'Ruby' + description = 'Chef cookbook metadata.json' + documentation_url = 'https://docs.chef.io/config_rb_metadata/' @classmethod - def is_package_data_file(cls, location): + def is_datafile(cls, location, filetypes=tuple()): """ - Return True if `location` path is for a Chef metadata.json file. - The metadata.json is also used in Python installed packages in a 'dist-info' + Return True if `location` path is for a Chef metadata.json file. The + metadata.json is/was also used in Python legacy wheels in a 'dist-info' directory. """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == 'metadata.rb') + if super().is_datafile(location, filetypes=filetypes): + parent = fileutils.file_name(fileutils.parent_directory(location)) + return not parent.endswith('dist-info') @classmethod - def recognize(cls, location): + def parse(cls, location): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Yield one or more Package manifest objects given a file ``location`` + pointing to a package archive, manifest or similar. """ with io.open(location, encoding='utf-8') as loc: - file_contents = loc.read() - formatted_file_contents = highlight( - file_contents, RubyLexer(), ChefMetadataFormatter()) - package_data = json.loads(formatted_file_contents) - return build_package(cls, package_data) + package_data = json.load(loc) + return build_package(package_data, datasource_id=cls.datasource_id) -@attr.s() -class ChefPackage(ChefPackageData, models.Package): - """ - A Chef Package that is created out of one/multiple chef package - manifests. - """ +class ChefMetadataRbHandler(BaseChefMetadataHandler): + datasource_id = 'chef_cookbook_metadata_rb' + path_patterns = ('*/metadata.rb',) + default_package_type = 'chef' + default_primary_language = 'Ruby' + description = 'Chef cookbook metadata.rb' + documentation_url = 'https://docs.chef.io/config_rb_metadata/' + + @classmethod + def parse(cls, location): + with io.open(location, encoding='utf-8') as loc: + file_contents = loc.read() - @property - def manifests(self): - return [ - MetadataJson, - Metadatarb - ] + # we use a Pygments formatter for parsing lexed Ruby code + formatted_file_contents = highlight( + file_contents, + RubyLexer(), + ChefMetadataFormatter() + ) + package_data = json.loads(formatted_file_contents) + return build_package(package_data, datasource_id=cls.datasource_id) -def build_package(cls, package_data): +def build_package(package_data, datasource_id): """ - Return a Package object from a package_data mapping (from a metadata.json or - similar) or None. + Return a PackageData object from a package_data mapping from a metadata.json + or similar or None. """ name = package_data.get('name') version = package_data.get('version') - if not name or not version: - # a metadata.json without name and version is not a usable chef package - # FIXME: raise error? - return maintainer_name = package_data.get('maintainer', '') maintainer_email = package_data.get('maintainer_email', '') @@ -249,21 +229,30 @@ def build_package(cls, package_data): if maintainer_name or maintainer_email: parties.append( models.Party( - name=maintainer_name or None, + name=maintainer_name.strip() or None, role='maintainer', - email=maintainer_email or None, + email=maintainer_email.strip() or None, ) ) + # TODO: combine descriptions as done elsewhere description = package_data.get('description', '') or package_data.get('long_description', '') lic = package_data.get('license', '') + declared_license = None + license_expression = None + if lic: + declared_license=lic.strip() + if declared_license: + license_expression = models.compute_normalized_license(declared_license) code_view_url = package_data.get('source_url', '') bug_tracking_url = package_data.get('issues_url', '') - dependencies = package_data.get('dependencies', {}) or package_data.get('depends', {}) - package_dependencies = [] - for dependency_name, requirement in dependencies.items(): - package_dependencies.append( + deps = dict(package_data.get('dependencies', {}) or {}) + deps.update(package_data.get('depends', {}) or {}) + + dependencies = [] + for dependency_name, requirement in deps.items(): + dependencies.append( models.DependentPackage( purl=PackageURL(type='chef', name=dependency_name).to_string(), scope='dependencies', @@ -273,14 +262,18 @@ def build_package(cls, package_data): ) ) - yield cls( + yield models.PackageData( + datasource_id=datasource_id, + type=ChefMetadataJsonHandler.default_package_type, name=name, version=version, parties=parties, description=description.strip() or None, - declared_license=lic.strip() or None, + declared_license=declared_license, + license_expression=license_expression, code_view_url=code_view_url.strip() or None, bug_tracking_url=bug_tracking_url.strip() or None, - download_url=chef_download_url(name, version).strip(), - dependencies=package_dependencies, + dependencies=dependencies, + primary_language='Ruby', + **get_urls(name, version), ) diff --git a/tests/packagedcode/data/chef/basic/metadata.json.expected b/tests/packagedcode/data/chef/basic/metadata.json.expected index 65ee33a87a9..c339a9a6081 100644 --- a/tests/packagedcode/data/chef/basic/metadata.json.expected +++ b/tests/packagedcode/data/chef/basic/metadata.json.expected @@ -33,8 +33,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -47,9 +47,10 @@ "resolved_package": {} } ], - "purl": "pkg:chef/301@0.1.0", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_json", + "purl": "pkg:chef/301@0.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/basic/metadata.rb.expected b/tests/packagedcode/data/chef/basic/metadata.rb.expected index d1136bf6a2c..8128bea003f 100644 --- a/tests/packagedcode/data/chef/basic/metadata.rb.expected +++ b/tests/packagedcode/data/chef/basic/metadata.rb.expected @@ -33,8 +33,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -47,9 +47,10 @@ "resolved_package": {} } ], - "purl": "pkg:chef/301@0.1.0", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/301@0.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/basic/test_package.json.expected b/tests/packagedcode/data/chef/basic/test_package.json.expected index d4486a5a23d..d339cbcaf8e 100644 --- a/tests/packagedcode/data/chef/basic/test_package.json.expected +++ b/tests/packagedcode/data/chef/basic/test_package.json.expected @@ -25,13 +25,14 @@ "license_expression": "public-domain", "declared_license": "public-domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:chef/test@0.01", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/", "repository_download_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/test@0.01" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected b/tests/packagedcode/data/chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected index a4c6c44dd27..ae66c10d50f 100644 --- a/tests/packagedcode/data/chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected +++ b/tests/packagedcode/data/chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected @@ -25,13 +25,14 @@ "license_expression": "public-domain", "declared_license": "public-domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:chef/test@0.01", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/", "repository_download_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/test@0.01" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/basic/test_package_dependencies.json.expected b/tests/packagedcode/data/chef/basic/test_package_dependencies.json.expected index 716d51495e1..76a0483a5f3 100644 --- a/tests/packagedcode/data/chef/basic/test_package_dependencies.json.expected +++ b/tests/packagedcode/data/chef/basic/test_package_dependencies.json.expected @@ -25,8 +25,8 @@ "license_expression": "public-domain", "declared_license": "public-domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": "pkg:chef/test@0.01", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/", "repository_download_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/test@0.01" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/basic/test_package_parties.json.expected b/tests/packagedcode/data/chef/basic/test_package_parties.json.expected index 66941a52117..4a10a631180 100644 --- a/tests/packagedcode/data/chef/basic/test_package_parties.json.expected +++ b/tests/packagedcode/data/chef/basic/test_package_parties.json.expected @@ -33,13 +33,14 @@ "license_expression": "public-domain", "declared_license": "public-domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:chef/test@0.01", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/", "repository_download_url": "https://supermarket.chef.io/cookbooks/test/versions/0.01/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/test/versions/0.01", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/test@0.01" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/dependencies/metadata.rb.expected b/tests/packagedcode/data/chef/dependencies/metadata.rb.expected index e1a16b41f6a..1f3881780fd 100644 --- a/tests/packagedcode/data/chef/dependencies/metadata.rb.expected +++ b/tests/packagedcode/data/chef/dependencies/metadata.rb.expected @@ -33,8 +33,8 @@ "license_expression": "apache-2.0", "declared_license": "Apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -56,9 +56,10 @@ "resolved_package": {} } ], - "purl": "pkg:chef/build-essential@8.2.1", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/build-essential/versions/8.2.1/", "repository_download_url": "https://supermarket.chef.io/cookbooks/build-essential/versions/8.2.1/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/build-essential/versions/8.2.1" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/build-essential/versions/8.2.1", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/build-essential@8.2.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/chef/package.scan.expected.json b/tests/packagedcode/data/chef/package.scan.expected.json new file mode 100644 index 00000000000..a15ee7eeaab --- /dev/null +++ b/tests/packagedcode/data/chef/package.scan.expected.json @@ -0,0 +1,236 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 2 + } + } + ], + "dependencies": [ + { + "purl": "pkg:chef/nodejs", + "extracted_requirement": null, + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:chef/nodejs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package/metadata.rb", + "datasource_id": "chef_cookbook_metadata_rb" + }, + { + "purl": "pkg:chef/nodejs", + "extracted_requirement": ">= 0.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:chef/nodejs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package/metadata.json", + "datasource_id": "chef_cookbook_metadata_json" + } + ], + "packages": [ + { + "type": "chef", + "namespace": null, + "name": "301", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Ruby", + "description": "Installs/Configures 301", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Mark Wilkerson", + "email": "mark@segfawlt.net", + "url": null + } + ], + "keywords": [], + "homepage_url": null, + "download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", + "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "package/metadata.rb" + ], + "datasource_ids": [ + "chef_cookbook_metadata_rb" + ], + "purl": "pkg:chef/301@0.1.0" + } + ], + "files": [ + { + "path": "package", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "package/metadata.json", + "type": "file", + "package_data": [ + { + "type": "chef", + "namespace": null, + "name": "301", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Ruby", + "description": "Installs/Configures 301", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Mark Wilkerson", + "email": "mark@segfawlt.net", + "url": null + } + ], + "keywords": [], + "homepage_url": null, + "download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:chef/nodejs", + "extracted_requirement": ">= 0.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", + "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_json", + "purl": "pkg:chef/301@0.1.0" + } + ], + "for_packages": [ + "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "package/metadata.rb", + "type": "file", + "package_data": [ + { + "type": "chef", + "namespace": null, + "name": "301", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Ruby", + "description": "Installs/Configures 301", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Mark Wilkerson", + "email": "mark@segfawlt.net", + "url": null + } + ], + "keywords": [], + "homepage_url": null, + "download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:chef/nodejs", + "extracted_requirement": null, + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", + "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/301@0.1.0" + } + ], + "for_packages": [ + "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/test_chef.py b/tests/packagedcode/test_chef.py index a7c26d4e1ed..5c0bd1374ed 100644 --- a/tests/packagedcode/test_chef.py +++ b/tests/packagedcode/test_chef.py @@ -12,6 +12,8 @@ from packagedcode import chef from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES +from scancode.cli_test_utils import run_scan_click +from scancode.cli_test_utils import check_json_scan class TestChef(PackageTester): @@ -19,60 +21,82 @@ class TestChef(PackageTester): def test_chef_metadata_json_is_package_data_file(self): test_file = self.get_test_loc('chef/basic/metadata.json') - assert chef.MetadataJson.is_package_data_file(test_file) + assert chef.ChefMetadataJsonHandler.is_datafile(test_file) def test_chef_metadata_rb_from_json(self): test_file = self.get_test_loc('chef/basic/metadata.json') expected_file = self.get_test_loc('chef/basic/metadata.json.expected') - self.check_packages(chef.MetadataJson.recognize(test_file), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.ChefMetadataJsonHandler.parse(test_file), expected_file, regen=REGEN_TEST_FIXTURES + ) def test_chef_metadata_rb_is_package_data_file(self): test_file = self.get_test_loc('chef/basic/metadata.rb') - assert chef.Metadatarb.is_package_data_file(test_file) + assert chef.ChefMetadataRbHandler.is_datafile(test_file) def test_parse_from_rb(self): test_file = self.get_test_loc('chef/basic/metadata.rb') expected_file = self.get_test_loc('chef/basic/metadata.rb.expected') - self.check_packages(chef.Metadatarb.recognize(test_file), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.ChefMetadataRbHandler.parse(test_file), expected_file, regen=REGEN_TEST_FIXTURES + ) def test_parse_from_rb_dependency_requirement(self): test_file = self.get_test_loc('chef/dependencies/metadata.rb') expected_file = self.get_test_loc('chef/dependencies/metadata.rb.expected') - self.check_packages(chef.Metadatarb.recognize(test_file), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.ChefMetadataRbHandler.parse(test_file), expected_file, regen=REGEN_TEST_FIXTURES + ) def test_build_package(self): package_data = dict( + type='chef', name='test', version='0.01', description='test package', - license='public-domain' + license='public-domain', ) expected_file = self.get_test_loc('chef/basic/test_package.json.expected') - self.check_packages(chef.build_package(chef.MetadataJson, package_data), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.build_package(package_data, datasource_id='chef_cookbook_metadata_rb'), + expected_file, + regen=REGEN_TEST_FIXTURES, + ) def test_build_package_long_description(self): package_data = dict( + type='chef', name='test', version='0.01', long_description='test package', - license='public-domain' + license='public-domain', ) expected_file = self.get_test_loc('chef/basic/test_package.json.expected') - self.check_packages(chef.build_package(chef.MetadataJson, package_data), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.build_package(package_data, datasource_id='chef_cookbook_metadata_rb'), + expected_file, + regen=REGEN_TEST_FIXTURES, + ) def test_build_package_dependencies(self): package_data = dict( + type='chef', name='test', version='0.01', long_description='test package', license='public-domain', - dependencies={'test dependency': '0.01'} + dependencies={'test dependency': '0.01'}, ) expected_file = self.get_test_loc('chef/basic/test_package_dependencies.json.expected') - self.check_packages(chef.build_package(chef.MetadataJson, package_data), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.build_package(package_data, datasource_id='chef_cookbook_metadata_rb'), + expected_file, + regen=REGEN_TEST_FIXTURES, + ) def test_build_package_parties(self): package_data = dict( + type='chef', name='test', version='0.01', long_description='test package', @@ -81,16 +105,36 @@ def test_build_package_parties(self): maintainer_email='test_maintainer@example.com', ) expected_file = self.get_test_loc('chef/basic/test_package_parties.json.expected') - self.check_packages(chef.build_package(chef.MetadataJson, package_data), expected_file, regen=REGEN_TEST_FIXTURES) + self.check_packages_data( + chef.build_package(package_data, datasource_id='chef_cookbook_metadata_rb'), + expected_file, + regen=REGEN_TEST_FIXTURES, + ) def test_build_package_code_view_url_and_bug_tracking_url(self): package_data = dict( + type='chef', name='test', version='0.01', long_description='test package', license='public-domain', source_url='example.com', - issues_url='example.com/issues' + issues_url='example.com/issues', + ) + expected_file = self.get_test_loc( + 'chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected' + ) + self.check_packages_data( + chef.build_package(package_data, datasource_id='chef_cookbook_metadata_rb'), + expected_file, + regen=REGEN_TEST_FIXTURES, + ) + + def test_scan_cli_works(self): + test_file = self.get_test_loc('chef/package/') + expected_file = self.get_test_loc('chef/package.scan.expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES ) - expected_file = self.get_test_loc('chef/basic/test_package_code_view_url_and_bug_tracking_url.json.expected') - self.check_packages(chef.build_package(chef.MetadataJson, package_data), expected_file, regen=REGEN_TEST_FIXTURES) From acd10b610b995cf2bb524a818b186c137ee36068 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:33:27 +0200 Subject: [PATCH 14/36] Adopt new handler design for Cocoapods We now have these data file handlers: * PodspecHandler * PodfileHandler * PodfileLockHandler * PodspecJsonHandler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/cocoapods.py | 583 ++++++----- .../assemble/many-podspecs-expected.json | 922 ++++++++++++++++++ .../cocoapods/assemble/many-podspecs.ABOUT | 3 + .../many-podspecs/AWSPluginsCore.podspec | 37 + .../AWSPredictionsPlugin.podspec | 39 + .../assemble/many-podspecs/Amplify.podspec | 55 ++ .../many-podspecs/AmplifyPlugins.podspec | 73 ++ .../many-podspecs/AmplifyTestCommon.podspec | 69 ++ .../CoreMLPredictionsPlugin.podspec | 25 + .../cocoapods/assemble/many-podspecs/Podfile | 49 + .../assemble/many-podspecs/Podfile.lock | 53 + .../many-podspecs/amplify-ios.LICENSE | 175 ++++ .../assemble/multiple-podspec-expected.json | 397 ++++++++ .../multiple-podspec/Differentiator.podspec | 23 + .../assemble/multiple-podspec/Podfile | 14 + .../assemble/multiple-podspec/Podfile.lock | 26 + .../multiple-podspec/RxDataSources.podspec | 47 + .../assemble/single-podspec-expected.json | 295 ++++++ .../cocoapods/assemble/single-podspec/Podfile | 14 + .../assemble/single-podspec/Podfile.lock | 26 + .../single-podspec/RxDataSources.podspec | 47 + .../data/cocoapods/assemble/solo/Podfile | 14 + .../assemble/solo/Podfile-expected.json | 69 ++ .../data/cocoapods/assemble/solo/Podfile.lock | 26 + .../assemble/solo/Podfile.lock-expected.json | 137 +++ .../assemble/solo/RxDataSources.podspec | 47 + .../solo/RxDataSources.podspec-expected.json | 128 +++ .../braintree_ios_Podfile.lock | 0 .../braintree_ios_Podfile.lock.expected.json | 29 +- .../data/cocoapods/podfile/Podfile | 35 + .../data/cocoapods/podfile/origin.ABOUT | 2 + ...rebaseAnalytics.podspec.json.expected.json | 11 +- .../podspec/BadgeHub.podspec.expected.json | 30 +- .../LoadingShimmer.podspec.expected.json | 30 +- .../data/cocoapods/podspec/PayTabsSDK.podspec | 15 + .../podspec/PayTabsSDK.podspec.expected.json | 46 + .../cocoapods/podspec/RxDataSources.podspec | 47 + .../RxDataSources.podspec.expected.json | 46 + .../podspec/Starscream.podspec.expected.json | 37 +- .../podspec/SwiftLib.podspec.expected.json | 30 +- .../podspec/flutter_paytabs_bridge.podspec | 24 + ...utter_paytabs_bridge.podspec.expected.json | 46 + .../cocoapods/podspec/kmmWebSocket.podspec | 16 + .../kmmWebSocket.podspec.expected.json | 46 + .../podspec/nanopb.podspec.expected.json | 30 +- tests/packagedcode/test_cocoapods.py | 170 +++- 46 files changed, 3685 insertions(+), 398 deletions(-) create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs-expected.json create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs.ABOUT create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPluginsCore.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPredictionsPlugin.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/Amplify.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyPlugins.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyTestCommon.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/CoreMLPredictionsPlugin.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile.lock create mode 100644 tests/packagedcode/data/cocoapods/assemble/many-podspecs/amplify-ios.LICENSE create mode 100644 tests/packagedcode/data/cocoapods/assemble/multiple-podspec-expected.json create mode 100644 tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Differentiator.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile create mode 100644 tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile.lock create mode 100644 tests/packagedcode/data/cocoapods/assemble/multiple-podspec/RxDataSources.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/single-podspec-expected.json create mode 100644 tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile create mode 100644 tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile.lock create mode 100644 tests/packagedcode/data/cocoapods/assemble/single-podspec/RxDataSources.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/Podfile create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/Podfile-expected.json create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock-expected.json create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec create mode 100644 tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec-expected.json rename tests/packagedcode/data/cocoapods/{podfle.lock => podfile.lock}/braintree_ios_Podfile.lock (100%) rename tests/packagedcode/data/cocoapods/{podfle.lock => podfile.lock}/braintree_ios_Podfile.lock.expected.json (88%) create mode 100644 tests/packagedcode/data/cocoapods/podfile/Podfile create mode 100644 tests/packagedcode/data/cocoapods/podfile/origin.ABOUT create mode 100644 tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec create mode 100644 tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec.expected.json create mode 100644 tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec create mode 100644 tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec.expected.json create mode 100644 tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec create mode 100644 tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec.expected.json create mode 100644 tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec create mode 100644 tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec.expected.json diff --git a/src/packagedcode/cocoapods.py b/src/packagedcode/cocoapods.py index 2efa5f86052..3552e2bae5c 100644 --- a/src/packagedcode/cocoapods.py +++ b/src/packagedcode/cocoapods.py @@ -9,19 +9,17 @@ import hashlib import json +import os import logging -import re -import attr import saneyaml +from packageurl import PackageURL -from commoncode import filetype from packagedcode import models from packagedcode.licensing import get_license_matches from packagedcode.licensing import get_license_expression_from_matches -from packagedcode.spec import Spec - -from packageurl import PackageURL +from packagedcode import spec +from packagedcode import utils """ Handle cocoapods packages manifests for macOS and iOS @@ -30,9 +28,11 @@ See https://cocoapods.org """ -# TODO: override the license detection to detect declared_license correctly. +TRACE = os.environ.get('SCANCODE_DEBUG_PACKAGE', False) + +def logger_debug(*args): + pass -TRACE = False logger = logging.getLogger(__name__) @@ -41,246 +41,302 @@ logging.basicConfig(stream=sys.stdout) logger.setLevel(logging.DEBUG) + def logger_debug(*args): + return logger.debug( + ' '.join(isinstance(a, str) and a or repr(a) for a in args) + ) -@attr.s() -class CocoapodsPackageData(models.PackageData): - default_type = 'pods' - default_primary_language = 'Objective-C' - default_web_baseurl = 'https://cocoapods.org' - github_specs_repo_baseurl = 'https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs' - default_cdn_baseurl='https://cdn.cocoapods.org/Specs' +# TODO: consider merging Gemfile.lock and Podfile.lock in one module: this is the same format - def repository_homepage_url(self, baseurl=default_web_baseurl): - return f'{baseurl}/pods/{self.name}' +# TODO: override the license detection to detect declared_license correctly. - def repository_download_url(self): - if self.homepage_url: - return f'{self.homepage_url}/archive/{self.version}.zip' - elif self.reponame: - return f'{self.reponame}/archive/refs/tags/{self.version}.zip' - def get_api_data_url(self): - return self.specs_json_github_url +def get_repo_base_url(vcs_url): + """ + Return the repository base_url given a ``vcs_url`` version control URL or + None. - def get_code_view_url(self): - if isinstance(self.reponame, str): - return self.reponame+'/tree/'+self.version + For example:: + >>> assert get_repo_base_url('https://github.com/jogendra/BadgeHub.git') == 'https://github.com/jogendra/BadgeHub' + >>> assert get_repo_base_url('https://github.com/jogendra/BadgeHub') == 'https://github.com/jogendra/BadgeHub' + >>> assert get_repo_base_url(None) == None + """ + if not vcs_url: + return - def get_bug_tracking_url(self): - if isinstance(self.reponame, str): - return self.reponame+'/issues/' + if not vcs_url.startswith('https://github.com/'): + # TODO: we may not know what to do if this is not a GH repo? + pass - def specs_json_cdn_url(self, baseurl=default_cdn_baseurl): - return f'{baseurl}/{self.hashed_path}/{self.name}/{self.version}/{self.name}.podspec.json' + if vcs_url.endswith('.git'): + reponame, _, _ = vcs_url.partition('.git') + else: + reponame = vcs_url - def specs_json_github_url(self, baseurl=github_specs_repo_baseurl): - return f'{baseurl}/{self.hashed_path}/{self.name}/{self.version}/{self.name}.podspec.json' + return reponame - @property - def reponame(self): - if isinstance(self.vcs_url, str): - if self.vcs_url[-4:] == '.git': - return self.vcs_url[:-4] - @property - def hashed_path(self): - """ - Returns a string with a part of the file path derived from the md5 hash. +def get_podname_proper(podname): + """ + Podnames in cocoapods sometimes are files inside a pods package (like 'OHHTTPStubs/Default') + This returns proper podname in those cases. + """ + if '/' in podname: + return podname.split('/')[0] + return podname - From https://github.com/CocoaPods/cdn.cocoapods.org: - "There are a set of known prefixes for all Podspec paths, you take the name of the pod, - create a hash (using md5) of it and take the first three characters." - """ - podname = self.get_podname_proper(self.name) - if self.name != podname: - name_to_hash = podname - else: - name_to_hash = self.name - hash_init = self.get_first_3_mdf_hash_characters(name_to_hash) - hashed_path = '/'.join(list(hash_init)) - return hashed_path +def get_hashed_path(name): + """ + Returns a string with a part of the file path derived from the md5 hash. - @staticmethod - def get_first_3_mdf_hash_characters(podname): - return hashlib.md5(podname.encode('utf-8')).hexdigest()[0:3] + From https://github.com/CocoaPods/cdn.cocoapods.org: + "There are a set of known prefixes for all Podspec paths, you take the name of the pod, + create a hash (using md5) of it and take the first three characters." + """ + if not name: + return + podname = get_podname_proper(name) + if name != podname: + name_to_hash = podname + else: + name_to_hash = name + + hash_init = get_first_three_md5_hash_characters(name_to_hash) + hashed_path = '/'.join(list(hash_init)) + return hashed_path - @staticmethod - def get_podname_proper(podname): - """ - Podnames in cocoapods sometimes are files inside a pods package (like 'OHHTTPStubs/Default') - This returns proper podname in those cases. - """ - if '/' in podname: - return podname.split('/')[0] - return podname +def get_first_three_md5_hash_characters(podname): + return hashlib.md5(podname.encode('utf-8')).hexdigest()[0:3] -@attr.s() -class Podspec(CocoapodsPackageData, models.PackageDataFile): - file_patterns = ('*.podspec',) - extensions = ('.podspec',) +class BasePodHandler(models.DatafileHandler): @classmethod - def is_package_data_file(cls, location): + def assemble(cls, package_data, resource, codebase): """ - Return True if the file at ``location`` is likely a manifest of this type. + Assemble pod packages and dependencies and handle the specific cases where + there are more than one podspec in the same directory. + This is designed to process .podspec, Podfile and Podfile.lock """ - return filetype.is_file(location) and location.endswith('.podspec') + if codebase.has_single_resource: + yield from models.DatafileHandler.assemble(package_data, resource, codebase) + else: + # do we have more than one podspec? + parent = resource.parent(codebase) + sibling_podspecs = [ + r for r in parent.children(codebase) + if r.name.endswith('.podspec') + ] + + siblings_counts = len(sibling_podspecs) + has_single_podspec = siblings_counts == 1 + has_multiple_podspec = siblings_counts > 1 + + datafile_name_patterns = ( + 'Podfile.lock', + 'Podfile', + ) + + if has_single_podspec: + # we can treat all podfile/spec as being for one package + datafile_name_patterns = (sibling_podspecs[0].name,) + datafile_name_patterns + + yield from models.DatafileHandler.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=parent, + codebase=codebase, + ) + + elif has_multiple_podspec: + # treat each of podspec and podfile alone without meraging + # as we cannot determine easily which podfile is for which + # podspec + podspec = sibling_podspecs.pop() + datafile_name_patterns = (podspec.name,) + datafile_name_patterns + + yield from models.DatafileHandler.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=parent, + codebase=codebase, + ) + + for resource in sibling_podspecs: + datafile_path = resource.path + yield resource + for package_data in resource.package_data: + package_data = models.PackageData.from_dict(package_data) + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=datafile_path, + ) + cls.assign_package_to_resources(package, resource, codebase) + yield package + + else: + # has_no_podspec: + yield from models.DatafileHandler.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=parent, + codebase=codebase, + ) + + +class PodspecHandler(BasePodHandler): + datasource_id = 'cocoapods_podspec' + path_patterns = ('*.podspec',) + default_package_type = 'pods' + default_primary_language = 'Objective-C' + description = 'Cocoapods .podspec' + documentation_url = 'https://guides.cocoapods.org/syntax/podspec.html' @classmethod - def recognize(cls, location): + def parse(cls, location): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Yield one or more Package manifest objects given a file ``location`` + pointing to a package archive, manifest or similar. """ - podspec_object = Spec() - data = podspec_object.parse_spec(location) + podspec = spec.parse_spec( + location=location, + package_type=cls.default_package_type, + ) - name = data.get('name') - version = data.get('version') - declared_license = data.get('license') - summary = data.get('summary', '') - description = data.get('description', '') - homepage_url = data.get('homepage_url') - source = data.get('source') - authors = data.get('author') or [] - if summary and not description.startswith(summary): - desc = [summary] - if description: - desc += [description] - description = '\n'.join(desc) + name = podspec.get('name') + version = podspec.get('version') + homepage_url = podspec.get('homepage') + declared_license = podspec.get('license') + license_expression = None + if declared_license: + license_expression = models.compute_normalized_license(declared_license) + summary = podspec.get('summary') + description = podspec.get('description') + description = utils.build_description( + summary=summary, + description=description, + ) + vcs_url = podspec.get('source') or '' + authors = podspec.get('author') or [] - author_names = [] - author_email = [] + # FIXME: we are doing nothing with the email list + parties = [] if authors: - for split_author in authors: - split_author = split_author.strip() - author, email = parse_person(split_author) - author_names.append(author) - author_email.append(email) + for author in authors: + auth, email = parse_person(author) + party = models.Party( + type=models.party_person, + name=auth, + email=email, + role='author', + ) + parties.append(party) - parties = list(party_mapper(author_names, author_email)) + urls = get_urls( + name=name, + version=version, + homepage_url=homepage_url, + vcs_url=vcs_url) - yield cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, - vcs_url=source, - source_packages=list(source.split('\n')), + primary_language=cls.default_primary_language, + vcs_url=vcs_url, + # FIXME: a source should be a PURL, not a list of URLs + # source_packages=vcs_url.split('\n'), description=description, declared_license=declared_license, + license_expression=license_expression, homepage_url=homepage_url, - parties=parties + parties=parties, + **urls, ) -@attr.s() -class PodfileLock(CocoapodsPackageData, models.PackageDataFile): +class PodfileHandler(PodspecHandler): + datasource_id = 'cocoapods_podfile' + path_patterns = ('*Podfile',) + default_package_type = 'pods' + default_primary_language = 'Objective-C' + description = 'Cocoapods Podfile' + documentation_url = 'https://guides.cocoapods.org/using/the-podfile.html' - file_patterns = ('*podfile.lock',) - extensions = ('.lock',) - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return (filetype.is_file(location) and location.endswith(('podfile.lock', 'Podfile.lock'))) +class PodfileLockHandler(BasePodHandler): + datasource_id = 'cocoapods_podfile_lock' + path_patterns = ('*Podfile.lock',) + default_package_type = 'pods' + default_primary_language = 'Objective-C' + description = 'Cocoapods Podfile.lock' + documentation_url = 'https://guides.cocoapods.org/using/the-podfile.html' @classmethod - def recognize(cls, location): + def parse(cls, location): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Yield PackageData from a YAML Podfile.lock. """ - data = cls.read_podfile_lock(location) + with open(location) as pfl: + data = saneyaml.load(pfl) pods = data['PODS'] - pod_deps = [] + dependencies = [] for pod in pods: - if isinstance(pod, dict): for main_pod, _dep_pods in pod.items(): - podname, namespace, version = get_data_from_pods(main_pod) - - purl = PackageURL( - type='pods', - namespace=namespace, - name=podname, - version=version, - ).to_string() + purl, xreq = parse_dep_requirements(main_pod) - pod_deps.append( + dependencies.append( models.DependentPackage( - purl=purl, - scope='requires-dev', - extracted_requirement=version, + purl=str(purl), + # FIXME: why dev? + scope='requires', + extracted_requirement=xreq, is_runtime=False, is_optional=True, is_resolved=True, ) ) - elif isinstance(pod, str): - podname, namespace, version = get_data_from_pods(pod) - purl = PackageURL( - type='pods', - namespace=namespace, - name=podname, - version=version, - ).to_string() + elif isinstance(pod, str): - pod_deps.append( + purl, xreq = parse_dep_requirements(pod) + + dependencies.append( models.DependentPackage( - purl=purl, - scope='requires-dev', - extracted_requirement=version, + purl=str(purl), + # FIXME: why dev? + scope='requires', + extracted_requirement=xreq, is_runtime=False, is_optional=True, is_resolved=True, ) ) - yield cls( - dependencies=pod_deps, - declared_license=None, + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies, ) - @staticmethod - def read_podfile_lock(location): - """ - Reads from podfile.lock file at location as YML. - """ - with open(location, 'r') as file: - data = saneyaml.load(file) - - return data - - -@attr.s() -class PodspecJson(CocoapodsPackageData, models.PackageDataFile): - - file_patterns = ('*.podspec.json',) - extensions = ('.json',) +class PodspecJsonHandler(models.DatafileHandler): + datasource_id = 'cocoapods_podspec_json' + path_patterns = ('*.podspec.json',) + default_package_type = 'pods' + default_primary_language = 'Objective-C' + description = 'Cocoapods .podspec.json' + documentation_url = 'https://guides.cocoapods.org/syntax/podspec.html' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.podspec.json') - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - data = cls.read_podspec_json(location) + def parse(cls, location): + with open(location) as psj: + data = json.load(psj) name = data.get('name') version = data.get('version') @@ -288,11 +344,11 @@ def recognize(cls, location): description = data.get('description', '') homepage_url = data.get('homepage') - license = data.get('license') - if isinstance(license, dict): - declared_license = ' '.join(list(license.values())) + lic = data.get('license') + if isinstance(lic, dict): + declared_license = ' '.join(list(lic.values())) else: - declared_license = license + declared_license = lic source = data.get('source') vcs_url = None @@ -305,9 +361,9 @@ def recognize(cls, location): vcs_url = git_url elif http_url: download_url = http_url - - if not vcs_url: - vcs_url = source + elif isinstance(source, str): + if not vcs_url: + vcs_url = source authors = data.get('authors') or {} @@ -330,7 +386,7 @@ def recognize(cls, location): party = models.Party( type=models.party_org, name=key, - url=value+'.com', + url=value + '.com', role='owner' ) parties.append(party) @@ -341,7 +397,7 @@ def recognize(cls, location): role='owner' ) parties.append(party) - + extra_data = {} extra_data['source'] = data['source'] dependencies = data.get('dependencies', '') @@ -349,47 +405,58 @@ def recognize(cls, location): extra_data['dependencies'] = dependencies extra_data['podspec.json'] = data - package_data = cls( + urls = get_urls( + name=name, + version=version, homepage_url=homepage_url, vcs_url=vcs_url) + + yield models.PackageData( + datasource_id=cls.datasource_id, + primary_language=cls.default_primary_language, + type=cls.default_package_type, name=name, version=version, - vcs_url=vcs_url, description=description, declared_license=declared_license, license_expression=license_expression, + parties=parties, + vcs_url=vcs_url, homepage_url=homepage_url, download_url=download_url, - parties=parties, + **urls, ) - package_data.api_data_url = package_data.get_api_data_url() - - yield package_data - - @staticmethod - def read_podspec_json(location): - """ - Reads from podspec.json file at location as JSON. - """ - with open(location, "r") as file: - data = json.load(file) - - return data - -@attr.s() -class CocoapodsPackage(CocoapodsPackageData, models.Package): +def get_urls(name=None, version=None, homepage_url=None, vcs_url=None): """ - A cocoapods Package that is created out of one/multiple cocoapods package - manifests and package-like data, with it's files. + Return a mapping of podspec URLS. """ - - @property - def manifests(self): - return [ - Podspec, - PodspecJson, - PodfileLock - ] + reponame = get_repo_base_url(vcs_url) or '' + + repository_download_url = None + if version: + if homepage_url: + repository_download_url = f'{homepage_url}/archive/{version}.zip' + if reponame: + repository_download_url = f'{reponame}/archive/refs/tags/{version}.zip' + + hashed_path = get_hashed_path(name) + # not used yet, alternative for api_data_url + specs_json_cdn_url = f'https://cdn.cocoapods.org/Specs/{hashed_path}/{name}/{version}/{name}.podspec.json' + + api_data_url = ( + hashed_path + and name + and version + and f'https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/{hashed_path}/{name}/{version}/{name}.podspec.json' + ) + + return dict( + repository_download_url=repository_download_url or None, + repository_homepage_url=name and f'https://cocoapods.org/pods/{name}' or None, + code_view_url=reponame and version and f'{reponame}/tree/{version}' or None, + bug_tracking_url=reponame and f'{reponame}/issues/' or None, + api_data_url=api_data_url or None, + ) def party_mapper(author, email): @@ -400,24 +467,15 @@ def party_mapper(author, email): yield models.Party( type=models.party_person, name=person, - role='author') + role='author', + ) for person in email: yield models.Party( type=models.party_person, email=person, - role='email') - - -person_parser = re.compile( - r'^(?P[\w\s(),-_.,]+)' - r'=>' - r'(?P[\S+]+$)' -).match - -person_parser_only_name = re.compile( - r'^(?P[\w\s(),-_.,]+)' -).match + role='email', + ) def parse_person(person): @@ -429,43 +487,66 @@ def parse_person(person): s.author = 'Rohit Potter' or s.author = 'Rohit Potter=>rohit@gmail.com' - Author check: + >>> p = parse_person('Rohit Potter=>rohit@gmail.com') - >>> assert p == ('Rohit Potter', 'rohit@gmail.com') + >>> assert p == ('Rohit Potter', 'rohit@gmail.com'), p >>> p = parse_person('Rohit Potter') - >>> assert p == ('Rohit Potter', None) + >>> assert p == ('Rohit Potter', None), p """ - parsed = person_parser(person) - if not parsed: - parsed = person_parser_only_name(person) - name = parsed.group('name') - email = None + if '=>' in person: + name, _, email = person.partition('=>') + email = email.strip('\'" =') + elif '=' in person: + name, _, email = person.partition('=') + email = email.strip('\'" ') else: - name = parsed.group('name') - email = parsed.group('email') + name = person + email = None + + name = name.strip('\'"') return name, email -def get_sha1_file(location): - """ - Get sha1 hash for a file at location. +def parse_dep_requirements(dep): """ - with open(location, "rb") as f: - return hashlib.sha1(f.read()).hexdigest() + Return a tuple of (Package URL, version constraint) given a ``dep`` + dependency requirement string extracted from a podspec. + For example: + + >>> expected = PackageURL.from_string('pkg:pods/OHHTTPStubs@9.0.0'), '9.0.0' + >>> assert parse_dep_requirements('OHHTTPStubs (9.0.0)') == expected + + >>> expected = PackageURL.from_string('pkg:pods/OHHTTPStubs/NSURLSession'), None + >>> result = parse_dep_requirements('OHHTTPStubs/NSURLSession') + >>> assert result == expected, result + + >>> expected = PackageURL.from_string('pkg:pods/AFNetworking/Serialization@3.0.4'), '= 3.0.4' + >>> result = parse_dep_requirements(' AFNetworking/Serialization (= 3.0.4) ') + >>> assert result == expected, result + """ + if '(' in dep: + name, _, version = dep.partition('(') + version = version.strip(')( ') + requirement = version + version = requirement.strip('= ') -def get_data_from_pods(dep_pod_version): - - if '(' in dep_pod_version: - podname, _, version = dep_pod_version.strip(')').partition(' (') else: version = None - podname = dep_pod_version - - if '/' in podname: - namespace, _, podname = podname.partition('/') + requirement = None + name = dep + + name = name.strip(')') + if '/' in name: + namespace, _, name = name.partition('/') else: namespace = None - return podname, namespace, version + purl = PackageURL( + type='pods', + namespace=namespace, + name=name, + version=version, + ) + return purl, requirement diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs-expected.json b/tests/packagedcode/data/cocoapods/assemble/many-podspecs-expected.json new file mode 100644 index 00000000000..a6f80eeda67 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs-expected.json @@ -0,0 +1,922 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 9 + } + } + ], + "dependencies": [ + { + "purl": "pkg:pods/AWSCore@2.27.0", + "extracted_requirement": "2.27.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/AWSCore@2.27.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/CwlCatchException@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/CwlCatchException@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/CwlCatchExceptionSupport@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/CwlCatchExceptionSupport@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/CwlMachBadInstructionHandler@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/CwlMachBadInstructionHandler@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/CwlPosixPreconditionTesting@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/CwlPosixPreconditionTesting@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/CwlPreconditionTesting@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/CwlPreconditionTesting@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/SwiftFormat/CLI@0.44.17", + "extracted_requirement": "0.44.17", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/SwiftFormat/CLI@0.44.17?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/SwiftLint@0.46.2", + "extracted_requirement": "0.46.2", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/SwiftLint@0.46.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "many-podspecs/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + } + ], + "packages": [ + { + "type": "pods", + "namespace": null, + "name": "CoreMLPredictionsPlugin", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/CoreMLPredictionsPlugin", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/b/1/e/CoreMLPredictionsPlugin/$AMPLIFY_VERSION/CoreMLPredictionsPlugin.podspec.json", + "package_uid": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/CoreMLPredictionsPlugin.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION" + }, + { + "type": "pods", + "namespace": null, + "name": "Amplify", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/Amplify", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/c/5/Amplify/$AMPLIFY_VERSION/Amplify.podspec.json", + "package_uid": "pkg:pods/Amplify@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/Amplify.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/Amplify@%24AMPLIFY_VERSION" + }, + { + "type": "pods", + "namespace": null, + "name": "AmplifyPlugins", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/AmplifyPlugins", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/1/8/AmplifyPlugins/$AMPLIFY_VERSION/AmplifyPlugins.podspec.json", + "package_uid": "pkg:pods/AmplifyPlugins@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/AmplifyPlugins.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/AmplifyPlugins@%24AMPLIFY_VERSION" + }, + { + "type": "pods", + "namespace": null, + "name": "AmplifyTestCommon", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Test resources used by different targets\nProvides different test resources and mock methods", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "hhttps://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/AmplifyTestCommon", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/1/4/f/AmplifyTestCommon/$AMPLIFY_VERSION/AmplifyTestCommon.podspec.json", + "package_uid": "pkg:pods/AmplifyTestCommon@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/AmplifyTestCommon.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/AmplifyTestCommon@%24AMPLIFY_VERSION" + }, + { + "type": "pods", + "namespace": null, + "name": "AWSPluginsCore", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/AWSPluginsCore", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/c/7/7/AWSPluginsCore/$AMPLIFY_VERSION/AWSPluginsCore.podspec.json", + "package_uid": "pkg:pods/AWSPluginsCore@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/AWSPluginsCore.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/AWSPluginsCore@%24AMPLIFY_VERSION" + }, + { + "type": "pods", + "namespace": null, + "name": "AWSPredictionsPlugin", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/AWSPredictionsPlugin", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/6/0/AWSPredictionsPlugin/$AMPLIFY_VERSION/AWSPredictionsPlugin.podspec.json", + "package_uid": "pkg:pods/AWSPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "many-podspecs/AWSPredictionsPlugin.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/AWSPredictionsPlugin@%24AMPLIFY_VERSION" + } + ], + "files": [ + { + "path": "many-podspecs", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "many-podspecs/AWSPluginsCore.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "AWSPluginsCore", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/AWSPluginsCore", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/c/7/7/AWSPluginsCore/$AMPLIFY_VERSION/AWSPluginsCore.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/AWSPluginsCore@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/AWSPluginsCore@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/AWSPredictionsPlugin.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "AWSPredictionsPlugin", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/AWSPredictionsPlugin", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/6/0/AWSPredictionsPlugin/$AMPLIFY_VERSION/AWSPredictionsPlugin.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/AWSPredictionsPlugin@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/AWSPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/Amplify.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "Amplify", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/Amplify", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/c/5/Amplify/$AMPLIFY_VERSION/Amplify.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/Amplify@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/Amplify@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/AmplifyPlugins.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "AmplifyPlugins", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/AmplifyPlugins", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/1/8/AmplifyPlugins/$AMPLIFY_VERSION/AmplifyPlugins.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/AmplifyPlugins@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/AmplifyPlugins@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/AmplifyTestCommon.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "AmplifyTestCommon", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Test resources used by different targets\nProvides different test resources and mock methods", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "hhttps://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/AmplifyTestCommon", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/1/4/f/AmplifyTestCommon/$AMPLIFY_VERSION/AmplifyTestCommon.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/AmplifyTestCommon@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/AmplifyTestCommon@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/CoreMLPredictionsPlugin.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "CoreMLPredictionsPlugin", + "version": "$AMPLIFY_VERSION", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Amazon Web Services Amplify for iOS.\nAWS Amplify for iOS provides a declarative library for application development using cloud services", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Amazon Web Services ", + "email": "amazonwebservices", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/aws-amplify/amplify-ios", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/aws-amplify/amplify-ios/issues/", + "code_view_url": "https://github.com/aws-amplify/amplify-ios/tree/$AMPLIFY_VERSION", + "vcs_url": "https://github.com/aws-amplify/amplify-ios.git", + "copyright": null, + "license_expression": "apache-2.0", + "declared_license": "Apache License, Version 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/CoreMLPredictionsPlugin", + "repository_download_url": "https://github.com/aws-amplify/amplify-ios/archive/refs/tags/$AMPLIFY_VERSION.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/b/1/e/CoreMLPredictionsPlugin/$AMPLIFY_VERSION/CoreMLPredictionsPlugin.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION" + } + ], + "for_packages": [ + "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/Podfile", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "", + "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": "", + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/Podfile.lock", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:pods/AWSCore@2.27.0", + "extracted_requirement": "2.27.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/CwlCatchException@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/CwlCatchExceptionSupport@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/CwlMachBadInstructionHandler@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/CwlPosixPreconditionTesting@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/CwlPreconditionTesting@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/SwiftFormat/CLI@0.44.17", + "extracted_requirement": "0.44.17", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/SwiftLint@0.46.2", + "extracted_requirement": "0.46.2", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile_lock", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/CoreMLPredictionsPlugin@%24AMPLIFY_VERSION?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "many-podspecs/amplify-ios.LICENSE", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs.ABOUT b/tests/packagedcode/data/cocoapods/assemble/many-podspecs.ABOUT new file mode 100644 index 00000000000..0346ed144aa --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs.ABOUT @@ -0,0 +1,3 @@ +date: 2022-04-14 +vcs_tool: git +vcs_repository: https://github.com/aws-amplify/amplify-ios diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPluginsCore.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPluginsCore.podspec new file mode 100644 index 00000000000..8fcc6a72539 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPluginsCore.podspec @@ -0,0 +1,37 @@ +# +# Be sure to run `pod spec lint Amplify.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +$AWS_SDK_VERSION = '2.27.0' +$OPTIMISTIC_AWS_SDK_VERSION = "~> #{$AWS_SDK_VERSION}" + +Pod::Spec.new do |s| + s.name = 'AWSPluginsCore' + + s.version = $AMPLIFY_VERSION + s.summary = 'Amazon Web Services Amplify for iOS.' + + s.description = 'AWS Amplify for iOS provides a declarative library for application development using cloud services' + + s.homepage = 'https://github.com/aws-amplify/amplify-ios' + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '11.0' + s.swift_version = '5.0' + + s.source_files = 'AmplifyPlugins/Core/AWSPluginsCore/**/*.swift' + + s.dependency 'Amplify', $AMPLIFY_VERSION + s.dependency 'AWSCore', $OPTIMISTIC_AWS_SDK_VERSION + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPredictionsPlugin.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPredictionsPlugin.podspec new file mode 100644 index 00000000000..bf0766c5cdc --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AWSPredictionsPlugin.podspec @@ -0,0 +1,39 @@ +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +$AWS_SDK_VERSION = '2.27.0' +$OPTIMISTIC_AWS_SDK_VERSION = "~> #{$AWS_SDK_VERSION}" + +Pod::Spec.new do |s| + s.name = 'AWSPredictionsPlugin' + + s.version = $AMPLIFY_VERSION + s.summary = 'Amazon Web Services Amplify for iOS.' + + s.description = 'AWS Amplify for iOS provides a declarative library for application development using cloud services' + + s.homepage = 'https://github.com/aws-amplify/amplify-ios' + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '13.0' + s.swift_version = '5.0' + + s.source_files = 'AmplifyPlugins/Predictions/AWSPredictionsPlugin/**/*.swift' + + s.dependency 'AWSComprehend', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'AWSPluginsCore', $AMPLIFY_VERSION + s.dependency 'AWSPolly', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'AWSRekognition', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'AWSTextract', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'AWSTranscribeStreaming', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'AWSTranslate', $OPTIMISTIC_AWS_SDK_VERSION + s.dependency 'CoreMLPredictionsPlugin', $AMPLIFY_VERSION + + # This is technically redundant, but adding it here allows Xcode to find it + # during initial indexing and prevent build errors after a fresh install + s.dependency 'AWSCore', $OPTIMISTIC_AWS_SDK_VERSION + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Amplify.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Amplify.podspec new file mode 100644 index 00000000000..1ba318f50c8 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Amplify.podspec @@ -0,0 +1,55 @@ +# +# Be sure to run `pod spec lint Amplify.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +Pod::Spec.new do |s| + s.name = 'Amplify' + s.version = $AMPLIFY_VERSION + s.summary = 'Amazon Web Services Amplify for iOS.' + + s.description = 'AWS Amplify for iOS provides a declarative library for application development using cloud services' + + s.homepage = 'https://github.com/aws-amplify/amplify-ios' + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '11.0' + s.swift_version = '5.0' + + s.source_files = 'Amplify/**/*.swift' + s.default_subspec = 'Default' + + # There appears to be a bug in Xcode < 12 where SwiftUI isn't properly + # weak-linked even though system frameworks should be weak-linked by default. + # Explicitly weak link it here until we upgrade Amplify's platform support + # version to >= 13.0. https://github.com/aws-amplify/amplify-ios/issues/878 + s.weak_frameworks = 'SwiftUI' + + s.subspec 'Default' do |default| + default.preserve_path = 'AmplifyTools' + default.script_phase = { + :name => 'Default', + :script => 'echo "no-op"', + :execution_position => :before_compile + } + end + + s.subspec 'Tools' do |ss| + ss.preserve_path = 'AmplifyTools' + ss.script_phase = { + :name => 'AmplifyTools', + :script => 'mkdir -p "${PODS_ROOT}/AmplifyTools"; cp -vf "${PODS_TARGET_SRCROOT}/AmplifyTools/amplify-tools.sh" "${PODS_ROOT}/AmplifyTools/."', + :execution_position => :before_compile + } + end + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyPlugins.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyPlugins.podspec new file mode 100644 index 00000000000..3f6f4483e5c --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyPlugins.podspec @@ -0,0 +1,73 @@ +# +# Be sure to run `pod spec lint AWSS3StoragePlugin.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +$AWS_SDK_VERSION = '2.27.0' +$OPTIMISTIC_AWS_SDK_VERSION = "~> #{$AWS_SDK_VERSION}" + +Pod::Spec.new do |s| + s.name = 'AmplifyPlugins' + s.version = $AMPLIFY_VERSION + s.summary = 'Amazon Web Services Amplify for iOS.' + + s.description = 'AWS Amplify for iOS provides a declarative library for application development using cloud services' + + s.homepage = 'https://github.com/aws-amplify/amplify-ios' + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '11.0' + s.swift_version = '5.0' + + s.dependency 'AWSPluginsCore', $AMPLIFY_VERSION + + # This is technically redundant, but adding it here allows Xcode to find it + # during initial indexing and prevent build errors after a fresh install + s.dependency 'AWSCore', $OPTIMISTIC_AWS_SDK_VERSION + + s.subspec 'AWSAPIPlugin' do |ss| + ss.source_files = 'AmplifyPlugins/API/AWSAPICategoryPlugin/**/*.swift' + ss.dependency 'AppSyncRealTimeClient', "~> 1.8" + end + + s.subspec 'AWSCognitoAuthPlugin' do |ss| + ss.source_files = 'AmplifyPlugins/Auth/AWSCognitoAuthPlugin/**/*.swift' + ss.dependency 'AWSMobileClient', $OPTIMISTIC_AWS_SDK_VERSION + + # This is technically redundant, but adding it here allows Xcode to find it + # during initial indexing and prevent build errors after a fresh install + ss.dependency 'AWSAuthCore', $OPTIMISTIC_AWS_SDK_VERSION + ss.dependency 'AWSCognitoIdentityProvider', $OPTIMISTIC_AWS_SDK_VERSION + ss.dependency 'AWSCognitoIdentityProviderASF', $OPTIMISTIC_AWS_SDK_VERSION + end + + s.subspec 'AWSDataStorePlugin' do |ss| + ss.source_files = 'AmplifyPlugins/DataStore/AWSDataStoreCategoryPlugin/**/*.swift' + ss.dependency 'SQLite.swift', '0.13.2' + end + + s.subspec 'AWSLocationGeoPlugin' do |ss| + ss.source_files = 'AmplifyPlugins/Geo/AWSLocationGeoPlugin/**/*.swift' + ss.dependency 'AWSLocation', $OPTIMISTIC_AWS_SDK_VERSION + end + + s.subspec 'AWSPinpointAnalyticsPlugin' do |ss| + ss.source_files = 'AmplifyPlugins/Analytics/AWSPinpointAnalyticsPlugin/**/*.swift' + ss.dependency 'AWSPinpoint', $OPTIMISTIC_AWS_SDK_VERSION + end + + s.subspec 'AWSS3StoragePlugin' do |ss| + ss.source_files = 'AmplifyPlugins/Storage/AWSS3StoragePlugin/**/*.swift' + ss.dependency 'AWSS3', $OPTIMISTIC_AWS_SDK_VERSION + end + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyTestCommon.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyTestCommon.podspec new file mode 100644 index 00000000000..78a93daa4b1 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/AmplifyTestCommon.podspec @@ -0,0 +1,69 @@ +# +# Be sure to run `pod spec lint AmplifyTestCommon.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +$AWS_SDK_VERSION = '2.27.0' +$OPTIMISTIC_AWS_SDK_VERSION = "~> #{$AWS_SDK_VERSION}" + +Pod::Spec.new do |s| + s.name = "AmplifyTestCommon" + s.version = $AMPLIFY_VERSION + s.summary = "Test resources used by different targets" + + s.description = "Provides different test resources and mock methods" + + s.homepage = "hhttps://github.com/aws-amplify/amplify-ios" + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '11.0' + s.swift_version = '5.0' + + s.source_files = 'AmplifyTestCommon/**/*.swift' + + s.dependency 'Amplify', $AMPLIFY_VERSION + s.dependency 'CwlPreconditionTesting', "~> 2.0" + + s.pod_target_xcconfig = { + 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' => 'YES', + 'ENABLE_TESTING_SEARCH_PATHS' => 'YES', + 'SYSTEM_FRAMEWORK_SEARCH_PATHS' => '$(CORRESPONDING_DEVICE_PLATFORM_DIR)/Developer/Library/Frameworks $(inherited)' + } + + s.script_phases = [ + { + :name => 'Copy Configuration folder', + :script => ' + TEMP_FILE=$HOME/.aws-amplify/amplify-ios/testconfiguration/. + DEST_PATH="${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/testconfiguration/" + + if [[ ! -d $TEMP_FILE ]] ; then + echo "${TEMP_FILE} does not exist. Using empty configuration." + exit 0 + fi + + if [[ -f $DEST_PATH ]] ; then + rm $DEST_PATH + fi + + cp -r $TEMP_FILE $DEST_PATH + ' + } + ] + s.subspec 'AWSPluginsTestCommon' do |ss| + ss.source_files = 'AmplifyPlugins/Core/AWSPluginsTestCommon/**/*.swift' + ss.dependency 'AWSPluginsCore', $AMPLIFY_VERSION + ss.dependency 'AWSMobileClient', $OPTIMISTIC_AWS_SDK_VERSION + ss.dependency 'AWSCore', $OPTIMISTIC_AWS_SDK_VERSION + end + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/CoreMLPredictionsPlugin.podspec b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/CoreMLPredictionsPlugin.podspec new file mode 100644 index 00000000000..7dfdab5043d --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/CoreMLPredictionsPlugin.podspec @@ -0,0 +1,25 @@ +# Version definitions +$AMPLIFY_VERSION = '1.23.0' +$AMPLIFY_RELEASE_TAG = "v#{$AMPLIFY_VERSION}" + +Pod::Spec.new do |s| + s.name = 'CoreMLPredictionsPlugin' + + s.version = $AMPLIFY_VERSION + s.summary = 'Amazon Web Services Amplify for iOS.' + + s.description = 'AWS Amplify for iOS provides a declarative library for application development using cloud services' + + s.homepage = 'https://github.com/aws-amplify/amplify-ios' + s.license = 'Apache License, Version 2.0' + s.author = { 'Amazon Web Services' => 'amazonwebservices' } + s.source = { :git => 'https://github.com/aws-amplify/amplify-ios.git', :tag => $AMPLIFY_RELEASE_TAG } + + s.platform = :ios, '13.0' + s.swift_version = '5.0' + + s.source_files = 'AmplifyPlugins/Predictions/CoreMLPredictionsPlugin/**/*.swift' + + s.dependency 'Amplify', $AMPLIFY_VERSION + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile new file mode 100644 index 00000000000..759f44cca8a --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile @@ -0,0 +1,49 @@ +load 'build-support/dependencies.rb' + +platform :ios, "11.0" + +target "Amplify" do + # Comment the next line if you"re not using Swift and don"t want to use dynamic frameworks + use_frameworks! + + include_build_tools! + + abstract_target "AmplifyTestConfigs" do + include_test_utilities! + + target "AmplifyTestCommon" do + pod "AWSCore", $OPTIMISTIC_AWS_SDK_VERSION + end + + target "AmplifyTests" do + end + + target "AmplifyFunctionalTests" do + end + + end + + target "AWSPluginsCore" do + inherit! :complete + use_frameworks! + + pod "AWSCore", $OPTIMISTIC_AWS_SDK_VERSION + + abstract_target "AWSPluginsTestConfigs" do + include_test_utilities! + + target "AWSPluginsCoreTests" do + end + + target "AWSPluginsTestCommon" do + end + end + + end + +end + +target "AmplifyTestApp" do + use_frameworks! + include_test_utilities! +end diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile.lock b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile.lock new file mode 100644 index 00000000000..0072497205f --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/Podfile.lock @@ -0,0 +1,53 @@ +PODS: + - AWSCore (2.27.0) + - CwlCatchException (2.1.1): + - CwlCatchExceptionSupport (~> 2.1.1) + - CwlCatchExceptionSupport (2.1.1) + - CwlMachBadInstructionHandler (2.1.0) + - CwlPosixPreconditionTesting (2.1.0) + - CwlPreconditionTesting (2.1.0): + - CwlCatchException (~> 2.1.1) + - CwlMachBadInstructionHandler (~> 2.1.0) + - CwlPosixPreconditionTesting (~> 2.1.0) + - SwiftFormat/CLI (0.44.17) + - SwiftLint (0.46.2) + +DEPENDENCIES: + - AWSCore (~> 2.27.0) + - CwlPreconditionTesting (from `https://github.com/mattgallagher/CwlPreconditionTesting.git`, tag `2.1.0`) + - SwiftFormat/CLI (= 0.44.17) + - SwiftLint + +SPEC REPOS: + trunk: + - AWSCore + - CwlCatchException + - CwlCatchExceptionSupport + - CwlMachBadInstructionHandler + - CwlPosixPreconditionTesting + - SwiftFormat + - SwiftLint + +EXTERNAL SOURCES: + CwlPreconditionTesting: + :git: https://github.com/mattgallagher/CwlPreconditionTesting.git + :tag: 2.1.0 + +CHECKOUT OPTIONS: + CwlPreconditionTesting: + :git: https://github.com/mattgallagher/CwlPreconditionTesting.git + :tag: 2.1.0 + +SPEC CHECKSUMS: + AWSCore: d605449939e5b40704f11ff9f91f905f7d978589 + CwlCatchException: 86760545af2a490a23e964d76d7c77442dbce79b + CwlCatchExceptionSupport: a004322095d7101b945442c86adc7cec0650f676 + CwlMachBadInstructionHandler: aa1fe9f2d08b29507c150d099434b2890247e7f8 + CwlPosixPreconditionTesting: 1ba4471964405941f79b3f06bbcf3c2be782950c + CwlPreconditionTesting: 73ae5de517a8761e5e40fb4136c6a26365af0440 + SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4 + SwiftLint: 6bc52a21f0fd44cab9aa2dc8e534fb9f5e3ec507 + +PODFILE CHECKSUM: 5e20e56b8ef40444b018a3736b7b726ff9772f00 + +COCOAPODS: 1.11.3 diff --git a/tests/packagedcode/data/cocoapods/assemble/many-podspecs/amplify-ios.LICENSE b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/amplify-ios.LICENSE new file mode 100644 index 00000000000..67db8588217 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/many-podspecs/amplify-ios.LICENSE @@ -0,0 +1,175 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/tests/packagedcode/data/cocoapods/assemble/multiple-podspec-expected.json b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec-expected.json new file mode 100644 index 00000000000..4bd5d92a047 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec-expected.json @@ -0,0 +1,397 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 4 + } + } + ], + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/boost@1.76.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "multiple-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/Yoga@1.14.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "multiple-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/YogaKit@1.18.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "multiple-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + } + ], + "packages": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "multiple-podspec/RxDataSources.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/RxDataSources@4.0.1" + }, + { + "type": "pods", + "namespace": null, + "name": "Differentiator", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Diff algorithm for UITableView and UICollectionView.\n RxDataSources is powered by Differentiator.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/Differentiator", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/9/8/Differentiator/4.0.1/Differentiator.podspec.json", + "package_uid": "pkg:pods/Differentiator@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "multiple-podspec/Differentiator.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/Differentiator@4.0.1" + } + ], + "files": [ + { + "path": "multiple-podspec", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "multiple-podspec/Differentiator.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "Differentiator", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "Diff algorithm for UITableView and UICollectionView.\n RxDataSources is powered by Differentiator.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/Differentiator", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/9/8/Differentiator/4.0.1/Differentiator.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/Differentiator@4.0.1" + } + ], + "for_packages": [ + "pkg:pods/Differentiator@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "multiple-podspec/Podfile", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "", + "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": "", + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "multiple-podspec/Podfile.lock", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile_lock", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "multiple-podspec/RxDataSources.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/RxDataSources@4.0.1" + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Differentiator.podspec b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Differentiator.podspec new file mode 100644 index 00000000000..32849a825ec --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Differentiator.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = "Differentiator" + s.version = "4.0.1" + s.summary = "Diff algorithm for UITableView and UICollectionView." + s.description = <<-DESC + Diff algorithm for UITableView and UICollectionView. + RxDataSources is powered by Differentiator. + DESC + + s.homepage = "https://github.com/RxSwiftCommunity/RxDataSources" + s.license = 'MIT' + s.author = { "Krunoslav Zaher" => "krunoslav.zaher@gmail.com" } + s.source = { :git => "https://github.com/RxSwiftCommunity/RxDataSources.git", :tag => s.version.to_s } + + s.requires_arc = true + s.swift_version = '5.0' + + s.source_files = 'Sources/Differentiator/**/*.swift' + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile new file mode 100644 index 00000000000..357a2f1c0b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile @@ -0,0 +1,14 @@ +require_relative '../node_modules/react-native/scripts/react_native_pods' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +platform :ios, '10.0' + +target 'TypeScriptAppNativeBase' do + config = use_native_modules! + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + + pod 'react-native-pager-view', :path => '../node_modules/react-native-pager-view' + + pod 'RNFastImage', :path => '../node_modules/react-native-fast-image' +end \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile.lock b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile.lock new file mode 100644 index 00000000000..f21bc3913b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/Podfile.lock @@ -0,0 +1,26 @@ +PODS: + - boost (1.76.0) + - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - YogaKit + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + +SPEC CHECKSUMS: + boost: a7c83b31436843459a1961bfd74b96033dc77234 + + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + +PODFILE CHECKSUM: 54cfb5be72a5a243eacfea1f4dd52754968dbdac + +COCOAPODS: 1.11.2 diff --git a/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/RxDataSources.podspec b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/RxDataSources.podspec new file mode 100644 index 00000000000..2115ffc8ab8 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/multiple-podspec/RxDataSources.podspec @@ -0,0 +1,47 @@ +Pod::Spec.new do |s| + s.name = "RxDataSources" + s.version = "4.0.1" + s.summary = "This is a collection of reactive data sources for UITableView and UICollectionView." + s.description = <<-DESC +This is a collection of reactive data sources for UITableView and UICollectionView. + +It enables creation of animated data sources for table an collection views in just a couple of lines of code. + +```swift +let data: Observable
= ... + +let dataSource = RxTableViewSectionedAnimatedDataSource
() +dataSource.cellFactory = { (tv, ip, i) in + let cell = tv.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style:.Default, reuseIdentifier: "Cell") + cell.textLabel!.text = "\(i)" + return cell +} + +// animated +data + .bind(to: animatedTableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) + +// normal reload +data + .bind(to: tableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) +``` + DESC + s.homepage = "https://github.com/RxSwiftCommunity/RxDataSources" + s.license = 'MIT' + s.author = { "Krunoslav Zaher" => "krunoslav.zaher@gmail.com" } + s.source = { :git => "https://github.com/RxSwiftCommunity/RxDataSources.git", :tag => s.version.to_s } + + s.requires_arc = true + s.swift_version = '5.0' + + s.source_files = 'Sources/RxDataSources/**/*.swift' + s.dependency 'Differentiator', '~> 4.0' + s.dependency 'RxSwift', '~> 5.0' + s.dependency 'RxCocoa', '~> 5.0' + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/single-podspec-expected.json b/tests/packagedcode/data/cocoapods/assemble/single-podspec-expected.json new file mode 100644 index 00000000000..9997864e1ec --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/single-podspec-expected.json @@ -0,0 +1,295 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 3 + } + } + ], + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/boost@1.76.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "single-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/Yoga@1.14.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "single-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/YogaKit@1.18.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "single-podspec/Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + } + ], + "packages": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "single-podspec/RxDataSources.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/RxDataSources@4.0.1" + } + ], + "files": [ + { + "path": "single-podspec", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "single-podspec/Podfile", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "", + "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": "", + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "single-podspec/Podfile.lock", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile_lock", + "purl": null + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "single-podspec/RxDataSources.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/RxDataSources@4.0.1" + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile b/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile new file mode 100644 index 00000000000..357a2f1c0b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile @@ -0,0 +1,14 @@ +require_relative '../node_modules/react-native/scripts/react_native_pods' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +platform :ios, '10.0' + +target 'TypeScriptAppNativeBase' do + config = use_native_modules! + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + + pod 'react-native-pager-view', :path => '../node_modules/react-native-pager-view' + + pod 'RNFastImage', :path => '../node_modules/react-native-fast-image' +end \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile.lock b/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile.lock new file mode 100644 index 00000000000..f21bc3913b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/single-podspec/Podfile.lock @@ -0,0 +1,26 @@ +PODS: + - boost (1.76.0) + - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - YogaKit + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + +SPEC CHECKSUMS: + boost: a7c83b31436843459a1961bfd74b96033dc77234 + + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + +PODFILE CHECKSUM: 54cfb5be72a5a243eacfea1f4dd52754968dbdac + +COCOAPODS: 1.11.2 diff --git a/tests/packagedcode/data/cocoapods/assemble/single-podspec/RxDataSources.podspec b/tests/packagedcode/data/cocoapods/assemble/single-podspec/RxDataSources.podspec new file mode 100644 index 00000000000..2115ffc8ab8 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/single-podspec/RxDataSources.podspec @@ -0,0 +1,47 @@ +Pod::Spec.new do |s| + s.name = "RxDataSources" + s.version = "4.0.1" + s.summary = "This is a collection of reactive data sources for UITableView and UICollectionView." + s.description = <<-DESC +This is a collection of reactive data sources for UITableView and UICollectionView. + +It enables creation of animated data sources for table an collection views in just a couple of lines of code. + +```swift +let data: Observable
= ... + +let dataSource = RxTableViewSectionedAnimatedDataSource
() +dataSource.cellFactory = { (tv, ip, i) in + let cell = tv.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style:.Default, reuseIdentifier: "Cell") + cell.textLabel!.text = "\(i)" + return cell +} + +// animated +data + .bind(to: animatedTableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) + +// normal reload +data + .bind(to: tableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) +``` + DESC + s.homepage = "https://github.com/RxSwiftCommunity/RxDataSources" + s.license = 'MIT' + s.author = { "Krunoslav Zaher" => "krunoslav.zaher@gmail.com" } + s.source = { :git => "https://github.com/RxSwiftCommunity/RxDataSources.git", :tag => s.version.to_s } + + s.requires_arc = true + s.swift_version = '5.0' + + s.source_files = 'Sources/RxDataSources/**/*.swift' + s.dependency 'Differentiator', '~> 4.0' + s.dependency 'RxSwift', '~> 5.0' + s.dependency 'RxCocoa', '~> 5.0' + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/Podfile b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile new file mode 100644 index 00000000000..357a2f1c0b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile @@ -0,0 +1,14 @@ +require_relative '../node_modules/react-native/scripts/react_native_pods' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +platform :ios, '10.0' + +target 'TypeScriptAppNativeBase' do + config = use_native_modules! + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + + pod 'react-native-pager-view', :path => '../node_modules/react-native-pager-view' + + pod 'RNFastImage', :path => '../node_modules/react-native-fast-image' +end \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/Podfile-expected.json b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile-expected.json new file mode 100644 index 00000000000..c42808e1c00 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile-expected.json @@ -0,0 +1,69 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 1 + } + } + ], + "dependencies": [], + "packages": [], + "files": [ + { + "path": "Podfile", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "", + "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": "", + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile", + "purl": null + } + ], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock new file mode 100644 index 00000000000..f21bc3913b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock @@ -0,0 +1,26 @@ +PODS: + - boost (1.76.0) + - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - YogaKit + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + +SPEC CHECKSUMS: + boost: a7c83b31436843459a1961bfd74b96033dc77234 + + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + +PODFILE CHECKSUM: 54cfb5be72a5a243eacfea1f4dd52754968dbdac + +COCOAPODS: 1.11.2 diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock-expected.json b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock-expected.json new file mode 100644 index 00000000000..8397b296d5c --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/Podfile.lock-expected.json @@ -0,0 +1,137 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 1 + } + } + ], + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/boost@1.76.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/Yoga@1.14.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {}, + "dependency_uid": "pkg:pods/YogaKit@1.18.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "Podfile.lock", + "datasource_id": "cocoapods_podfile_lock" + } + ], + "packages": [], + "files": [ + { + "path": "Podfile.lock", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:pods/boost@1.76.0", + "extracted_requirement": "1.76.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/Yoga@1.14.0", + "extracted_requirement": "1.14.0", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:pods/YogaKit@1.18.1", + "extracted_requirement": "1.18.1", + "scope": "requires", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "cocoapods_podfile_lock", + "purl": null + } + ], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec b/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec new file mode 100644 index 00000000000..2115ffc8ab8 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec @@ -0,0 +1,47 @@ +Pod::Spec.new do |s| + s.name = "RxDataSources" + s.version = "4.0.1" + s.summary = "This is a collection of reactive data sources for UITableView and UICollectionView." + s.description = <<-DESC +This is a collection of reactive data sources for UITableView and UICollectionView. + +It enables creation of animated data sources for table an collection views in just a couple of lines of code. + +```swift +let data: Observable
= ... + +let dataSource = RxTableViewSectionedAnimatedDataSource
() +dataSource.cellFactory = { (tv, ip, i) in + let cell = tv.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style:.Default, reuseIdentifier: "Cell") + cell.textLabel!.text = "\(i)" + return cell +} + +// animated +data + .bind(to: animatedTableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) + +// normal reload +data + .bind(to: tableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) +``` + DESC + s.homepage = "https://github.com/RxSwiftCommunity/RxDataSources" + s.license = 'MIT' + s.author = { "Krunoslav Zaher" => "krunoslav.zaher@gmail.com" } + s.source = { :git => "https://github.com/RxSwiftCommunity/RxDataSources.git", :tag => s.version.to_s } + + s.requires_arc = true + s.swift_version = '5.0' + + s.source_files = 'Sources/RxDataSources/**/*.swift' + s.dependency 'Differentiator', '~> 4.0' + s.dependency 'RxSwift', '~> 5.0' + s.dependency 'RxCocoa', '~> 5.0' + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' + +end diff --git a/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec-expected.json b/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec-expected.json new file mode 100644 index 00000000000..5bc826b40b2 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/assemble/solo/RxDataSources.podspec-expected.json @@ -0,0 +1,128 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 1 + } + } + ], + "dependencies": [], + "packages": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "package_uid": "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "RxDataSources.podspec" + ], + "datasource_ids": [ + "cocoapods_podspec" + ], + "purl": "pkg:pods/RxDataSources@4.0.1" + } + ], + "files": [ + { + "path": "RxDataSources.podspec", + "type": "file", + "package_data": [ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/RxDataSources@4.0.1" + } + ], + "for_packages": [ + "pkg:pods/RxDataSources@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podfle.lock/braintree_ios_Podfile.lock b/tests/packagedcode/data/cocoapods/podfile.lock/braintree_ios_Podfile.lock similarity index 100% rename from tests/packagedcode/data/cocoapods/podfle.lock/braintree_ios_Podfile.lock rename to tests/packagedcode/data/cocoapods/podfile.lock/braintree_ios_Podfile.lock diff --git a/tests/packagedcode/data/cocoapods/podfle.lock/braintree_ios_Podfile.lock.expected.json b/tests/packagedcode/data/cocoapods/podfile.lock/braintree_ios_Podfile.lock.expected.json similarity index 88% rename from tests/packagedcode/data/cocoapods/podfle.lock/braintree_ios_Podfile.lock.expected.json rename to tests/packagedcode/data/cocoapods/podfile.lock/braintree_ios_Podfile.lock.expected.json index b94d98544b8..80932289b8b 100644 --- a/tests/packagedcode/data/cocoapods/podfle.lock/braintree_ios_Podfile.lock.expected.json +++ b/tests/packagedcode/data/cocoapods/podfile.lock/braintree_ios_Podfile.lock.expected.json @@ -25,14 +25,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:pods/Expecta@1.0.6", "extracted_requirement": "1.0.6", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -41,7 +41,7 @@ { "purl": "pkg:pods/InAppSettingsKit@3.1.4", "extracted_requirement": "3.1.4", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -50,7 +50,7 @@ { "purl": "pkg:pods/OCMock@3.7.1", "extracted_requirement": "3.7.1", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -59,7 +59,7 @@ { "purl": "pkg:pods/OHHTTPStubs@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -68,7 +68,7 @@ { "purl": "pkg:pods/OHHTTPStubs/Core@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -77,7 +77,7 @@ { "purl": "pkg:pods/OHHTTPStubs/Default@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -86,7 +86,7 @@ { "purl": "pkg:pods/OHHTTPStubs/JSON@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -95,7 +95,7 @@ { "purl": "pkg:pods/OHHTTPStubs/NSURLSession@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -104,7 +104,7 @@ { "purl": "pkg:pods/OHHTTPStubs/OHPathHelpers@9.0.0", "extracted_requirement": "9.0.0", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -113,7 +113,7 @@ { "purl": "pkg:pods/Specta@1.0.7", "extracted_requirement": "1.0.7", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, @@ -122,16 +122,17 @@ { "purl": "pkg:pods/xcbeautify@0.8.1", "extracted_requirement": "0.8.1", - "scope": "requires-dev", + "scope": "requires", "is_runtime": false, "is_optional": true, "is_resolved": true, "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cocoapods_podfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podfile/Podfile b/tests/packagedcode/data/cocoapods/podfile/Podfile new file mode 100644 index 00000000000..c58fa041a11 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podfile/Podfile @@ -0,0 +1,35 @@ +require_relative '../node_modules/react-native/scripts/react_native_pods' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +platform :ios, '10.0' + +target 'TypeScriptAppNativeBase' do + config = use_native_modules! + + use_react_native!( + :path => config[:reactNativePath], + # to enable hermes on iOS, change `false` to `true` and then install pods + :hermes_enabled => false + ) + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + + pod 'react-native-pager-view', :path => '../node_modules/react-native-pager-view' + + pod 'RNFastImage', :path => '../node_modules/react-native-fast-image' + + target 'TypeScriptAppNativeBaseTests' do + inherit! :complete + # Pods for testing + end + + # Enables Flipper. + # + # Note that if you have use_frameworks! enabled, Flipper will not work and + # you should disable the next line. + use_flipper!() + + post_install do |installer| + react_native_post_install(installer) + end +end \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podfile/origin.ABOUT b/tests/packagedcode/data/cocoapods/podfile/origin.ABOUT new file mode 100644 index 00000000000..10a493b2d08 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podfile/origin.ABOUT @@ -0,0 +1,2 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/Leo2018Wu/BeYoung/f9a1fdd70d073956263829c62804ad4a596ec76d/ios/Podfile diff --git a/tests/packagedcode/data/cocoapods/podspec.json/FirebaseAnalytics.podspec.json.expected.json b/tests/packagedcode/data/cocoapods/podspec.json/FirebaseAnalytics.podspec.json.expected.json index 23533fdb4c9..76d4ab58c3a 100644 --- a/tests/packagedcode/data/cocoapods/podspec.json/FirebaseAnalytics.podspec.json.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec.json/FirebaseAnalytics.podspec.json.expected.json @@ -28,20 +28,19 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": { - "http": "https://dl.google.com/firebase/ios/analytics/19ed8dba01e90708/FirebaseAnalytics-8.1.1.tar.gz" - }, + "vcs_url": null, "copyright": null, "license_expression": "unknown", "declared_license": "Copyright 2021 Google Copyright", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/FirebaseAnalytics@8.1.1", "repository_homepage_url": "https://cocoapods.org/pods/FirebaseAnalytics", "repository_download_url": "https://firebase.google.com/features/analytics//archive/8.1.1.zip", - "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/e/2/1/FirebaseAnalytics/8.1.1/FirebaseAnalytics.podspec.json" + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/e/2/1/FirebaseAnalytics/8.1.1/FirebaseAnalytics.podspec.json", + "datasource_id": "cocoapods_podspec_json", + "purl": "pkg:pods/FirebaseAnalytics@8.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/BadgeHub.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/BadgeHub.podspec.expected.json index 756916e73f1..c6ca7213439 100644 --- a/tests/packagedcode/data/cocoapods/podspec/BadgeHub.podspec.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec/BadgeHub.podspec.expected.json @@ -7,20 +7,13 @@ "qualifiers": {}, "subpath": null, "primary_language": "Objective-C", - "description": "A way to quickly add a notification bedge icon to any view.\n Make any UIView a full fledged animated notification center. It is a way to quickly add a notification badge icon to a UIView. It make very easy to add badge to any view.", + "description": "A way to quickly add a notification bedge icon to any view.\nMake any UIView a full fledged animated notification center. It is a way to quickly add a notification badge icon to a UIView. It make very easy to add badge to any view.", "release_date": null, "parties": [ { "type": "person", "role": "author", - "name": "jogendra", - "email": null, - "url": null - }, - { - "type": "person", - "role": "email", - "name": null, + "name": "jogendra ", "email": "imjog24@gmail.com", "url": null } @@ -33,22 +26,21 @@ "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, + "bug_tracking_url": "https://github.com/jogendra/BadgeHub/issues/", + "code_view_url": "https://github.com/jogendra/BadgeHub/tree/0.1.1", "vcs_url": "https://github.com/jogendra/BadgeHub.git", "copyright": null, "license_expression": "mit AND unknown", - "declared_license": ":type => MIT, :file => LICENSE", + "declared_license": ":type = MIT, :file = LICENSE", "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "https://github.com/jogendra/BadgeHub.git" - ], + "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/BadgeHub@0.1.1", "repository_homepage_url": "https://cocoapods.org/pods/BadgeHub", - "repository_download_url": "https://github.com/jogendra/BadgeHub/archive/0.1.1.zip", - "api_data_url": null + "repository_download_url": "https://github.com/jogendra/BadgeHub/archive/refs/tags/0.1.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/7/b/b/BadgeHub/0.1.1/BadgeHub.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/BadgeHub@0.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/LoadingShimmer.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/LoadingShimmer.podspec.expected.json index 1673b69e5c1..c9ad61ec04c 100644 --- a/tests/packagedcode/data/cocoapods/podspec/LoadingShimmer.podspec.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec/LoadingShimmer.podspec.expected.json @@ -7,20 +7,13 @@ "qualifiers": {}, "subpath": null, "primary_language": "Objective-C", - "description": "An easy way to add a shimmering effect to any view with just one line of code. It is useful as an unobtrusive loading indicator.\n An easy way to add a shimmering effect to any view with just single line of code. It is useful as an unobtrusive loading indicator. This is a network request waiting for the framework, the framework to increase the dynamic effect, convenient and fast, a line of code can be used.", + "description": "An easy way to add a shimmering effect to any view with just one line of code. It is useful as an unobtrusive loading indicator.\nAn easy way to add a shimmering effect to any view with just single line of code. It is useful as an unobtrusive loading indicator. This is a network request waiting for the framework, the framework to increase the dynamic effect, convenient and fast, a line of code can be used.", "release_date": null, "parties": [ { "type": "person", "role": "author", - "name": "jogendra", - "email": null, - "url": null - }, - { - "type": "person", - "role": "email", - "name": null, + "name": "jogendra ", "email": "jogendrafx@gmail.com", "url": null } @@ -33,22 +26,21 @@ "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, + "bug_tracking_url": "https://github.com/jogendra/LoadingShimmer/issues/", + "code_view_url": "https://github.com/jogendra/LoadingShimmer/tree/1.0.3", "vcs_url": "https://github.com/jogendra/LoadingShimmer.git", "copyright": null, "license_expression": "mit AND unknown", - "declared_license": ":type => MIT, :file => LICENSE", + "declared_license": ":type = MIT, :file = LICENSE", "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "https://github.com/jogendra/LoadingShimmer.git" - ], + "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/LoadingShimmer@1.0.3", "repository_homepage_url": "https://cocoapods.org/pods/LoadingShimmer", - "repository_download_url": "https://github.com/jogendra/LoadingShimmer/archive/1.0.3.zip", - "api_data_url": null + "repository_download_url": "https://github.com/jogendra/LoadingShimmer/archive/refs/tags/1.0.3.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/7/6/8/LoadingShimmer/1.0.3/LoadingShimmer.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/LoadingShimmer@1.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec b/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec new file mode 100644 index 00000000000..6dad99a3918 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec @@ -0,0 +1,15 @@ +Pod::Spec.new do |s| + s.name = "PayTabsSDK" + s.version = "6.1.18" + s.summary = "PayTabs is an online payment gateway." + s.ios.deployment_target = '10.0' + s.homepage = "https://github.com/paytabscom/paytabs-ios-library-sample/tree/master" + s.license = "MIT" + s.author = { "PayTabs" => "m.adly@paytabs.com" } + s.source = { :git => 'https://github.com/paytabscom/paytabs-ios-library-sample.git', :tag => s.version.to_s } + s.frameworks = 'Foundation', 'CoreTelephony', 'WebKit', 'PassKit', 'SystemConfiguration', 'CoreLocation' + s.swift_version = '5.0' + s.ios.vendored_frameworks = 'sources/PaymentSDK.xcframework' + s.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => "'${PODS_ROOT}'/sources/**", 'SWIFT_INCLUDE_PATHS' => "'${PODS_TARGET_SRCROOT}'/sources/**"} + +end diff --git a/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec.expected.json new file mode 100644 index 00000000000..606b26813ae --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/PayTabsSDK.podspec.expected.json @@ -0,0 +1,46 @@ +[ + { + "type": "pods", + "namespace": null, + "name": "PayTabsSDK", + "version": "6.1.18", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "PayTabs is an online payment gateway.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "PayTabs ", + "email": "m.adly@paytabs.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/paytabscom/paytabs-ios-library-sample/tree/master", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/paytabscom/paytabs-ios-library-sample/issues/", + "code_view_url": "https://github.com/paytabscom/paytabs-ios-library-sample/tree/6.1.18", + "vcs_url": "https://github.com/paytabscom/paytabs-ios-library-sample.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/PayTabsSDK", + "repository_download_url": "https://github.com/paytabscom/paytabs-ios-library-sample/archive/refs/tags/6.1.18.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/b/5/f/PayTabsSDK/6.1.18/PayTabsSDK.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/PayTabsSDK@6.1.18" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec b/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec new file mode 100644 index 00000000000..2115ffc8ab8 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec @@ -0,0 +1,47 @@ +Pod::Spec.new do |s| + s.name = "RxDataSources" + s.version = "4.0.1" + s.summary = "This is a collection of reactive data sources for UITableView and UICollectionView." + s.description = <<-DESC +This is a collection of reactive data sources for UITableView and UICollectionView. + +It enables creation of animated data sources for table an collection views in just a couple of lines of code. + +```swift +let data: Observable
= ... + +let dataSource = RxTableViewSectionedAnimatedDataSource
() +dataSource.cellFactory = { (tv, ip, i) in + let cell = tv.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style:.Default, reuseIdentifier: "Cell") + cell.textLabel!.text = "\(i)" + return cell +} + +// animated +data + .bind(to: animatedTableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) + +// normal reload +data + .bind(to: tableView.rx.items(dataSource: dataSource)) + .disposed(by: disposeBag) +``` + DESC + s.homepage = "https://github.com/RxSwiftCommunity/RxDataSources" + s.license = 'MIT' + s.author = { "Krunoslav Zaher" => "krunoslav.zaher@gmail.com" } + s.source = { :git => "https://github.com/RxSwiftCommunity/RxDataSources.git", :tag => s.version.to_s } + + s.requires_arc = true + s.swift_version = '5.0' + + s.source_files = 'Sources/RxDataSources/**/*.swift' + s.dependency 'Differentiator', '~> 4.0' + s.dependency 'RxSwift', '~> 5.0' + s.dependency 'RxCocoa', '~> 5.0' + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' + +end diff --git a/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec.expected.json new file mode 100644 index 00000000000..09ba749d667 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/RxDataSources.podspec.expected.json @@ -0,0 +1,46 @@ +[ + { + "type": "pods", + "namespace": null, + "name": "RxDataSources", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "This is a collection of reactive data sources for UITableView and UICollectionView.\n\nIt enables creation of animated data sources for table an collection views in just a couple of lines of code.\n\n```swift\nlet data: Observable
= ...\n\nlet dataSource = RxTableViewSectionedAnimatedDataSource
()\ndataSource.cellFactory = { (tv, ip, i) in\n let cell = tv.dequeueReusableCell(withIdentifier: \"Cell\") ?? UITableViewCell(style:.Default, reuseIdentifier: \"Cell\")\n cell.textLabel!.text = \"\\(i)\"\n return cell\n}\n\n// animated\ndata\n .bind(to: animatedTableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n\n// normal reload\ndata\n .bind(to: tableView.rx.items(dataSource: dataSource))\n .disposed(by: disposeBag)\n```", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Krunoslav Zaher ", + "email": "krunoslav.zaher@gmail.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "https://github.com/RxSwiftCommunity/RxDataSources", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/RxSwiftCommunity/RxDataSources/issues/", + "code_view_url": "https://github.com/RxSwiftCommunity/RxDataSources/tree/4.0.1", + "vcs_url": "https://github.com/RxSwiftCommunity/RxDataSources.git", + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/RxDataSources", + "repository_download_url": "https://github.com/RxSwiftCommunity/RxDataSources/archive/refs/tags/4.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/9/a/4/RxDataSources/4.0.1/RxDataSources.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/RxDataSources@4.0.1" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/Starscream.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/Starscream.podspec.expected.json index 4aa31e6575e..3009b84faec 100644 --- a/tests/packagedcode/data/cocoapods/podspec/Starscream.podspec.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec/Starscream.podspec.expected.json @@ -13,28 +13,14 @@ { "type": "person", "role": "author", - "name": "Dalton Cherry", - "email": null, - "url": null - }, - { - "type": "person", - "role": "author", - "name": "Austin Cherry", - "email": null, - "url": null - }, - { - "type": "person", - "role": "email", - "name": null, + "name": "Dalton Cherry ", "email": "http://daltoniam.com", "url": null }, { "type": "person", - "role": "email", - "name": null, + "role": "author", + "name": " Austin Cherry ", "email": "http://austincherry.me", "url": null } @@ -47,22 +33,21 @@ "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, + "bug_tracking_url": "https://github.com/daltoniam/Starscream/issues/", + "code_view_url": "https://github.com/daltoniam/Starscream/tree/4.0.3", "vcs_url": "https://github.com/daltoniam/Starscream.git", "copyright": null, "license_expression": "apache-2.0", "declared_license": "Apache License, Version 2.0", "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "https://github.com/daltoniam/Starscream.git" - ], + "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/Starscream@4.0.3", "repository_homepage_url": "https://cocoapods.org/pods/Starscream", - "repository_download_url": "https://github.com/daltoniam/Starscream/archive/4.0.3.zip", - "api_data_url": null + "repository_download_url": "https://github.com/daltoniam/Starscream/archive/refs/tags/4.0.3.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/2/2/f/Starscream/4.0.3/Starscream.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/Starscream@4.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/SwiftLib.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/SwiftLib.podspec.expected.json index a6404cbfc41..9397bdf2a34 100644 --- a/tests/packagedcode/data/cocoapods/podspec/SwiftLib.podspec.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec/SwiftLib.podspec.expected.json @@ -7,20 +7,13 @@ "qualifiers": {}, "subpath": null, "primary_language": "Objective-C", - "description": "A CocoaPods library written in Swift\n This CocoaPods library helps you perform calculation.", + "description": "A CocoaPods library written in Swift\nThis CocoaPods library helps you perform calculation.", "release_date": null, "parties": [ { "type": "person", "role": "author", - "name": "alizainprasla", - "email": null, - "url": null - }, - { - "type": "person", - "role": "email", - "name": null, + "name": "alizainprasla ", "email": "alizainprasla@gmail.com", "url": null } @@ -33,22 +26,21 @@ "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, + "bug_tracking_url": "https://github.com/alizainprasla/swiftlib/issues/", + "code_view_url": "https://github.com/alizainprasla/swiftlib/tree/0.0.1", "vcs_url": "https://github.com/alizainprasla/swiftlib.git", "copyright": null, "license_expression": "mit AND unknown", - "declared_license": ":type => MIT, :file => LICENSE", + "declared_license": ":type = MIT, :file = LICENSE", "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "https://github.com/alizainprasla/swiftlib.git" - ], + "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/SwiftLib@0.0.1", "repository_homepage_url": "https://cocoapods.org/pods/SwiftLib", - "repository_download_url": "https://github.com/alizainprasla/swiftlib/archive/0.0.1.zip", - "api_data_url": null + "repository_download_url": "https://github.com/alizainprasla/swiftlib/archive/refs/tags/0.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/c/9/1/SwiftLib/0.0.1/SwiftLib.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/SwiftLib@0.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec b/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec new file mode 100644 index 00000000000..452c41df59d --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec @@ -0,0 +1,24 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. +# Run pod lib lint flutter_paytabs_bridge.podspec' to validate before publishing. +# +Pod::Spec.new do |s| + s.name = 'flutter_paytabs_bridge' + s.version = '2.2.5' + s.summary = 'A new flutter plugin project.' + s.description = <<-DESC +A new flutter plugin project. + DESC + s.homepage = 'http://example.com' + s.license = { :file => '../LICENSE' } + s.author = { 'Your Company' => 'email@example.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.dependency 'Flutter' + s.platform = :ios, '10.0' + s.dependency "PayTabsSDK", "6.1.18" + s.static_framework = true + # Flutter.framework does not contain a i386 slice. + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } + s.swift_version = '5.0' +end diff --git a/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec.expected.json new file mode 100644 index 00000000000..1b131e24698 --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/flutter_paytabs_bridge.podspec.expected.json @@ -0,0 +1,46 @@ +[ + { + "type": "pods", + "namespace": null, + "name": "flutter_paytabs_bridge", + "version": "2.2.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "A new flutter plugin project.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Your Company ", + "email": "email@example.com", + "url": null + } + ], + "keywords": [], + "homepage_url": "http://example.com", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "./issues/", + "code_view_url": "./tree/2.2.5", + "vcs_url": ".", + "copyright": null, + "license_expression": "unknown", + "declared_license": ":file = ../LICENSE", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/flutter_paytabs_bridge", + "repository_download_url": "./archive/refs/tags/2.2.5.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/5/1/4/flutter_paytabs_bridge/2.2.5/flutter_paytabs_bridge.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/flutter_paytabs_bridge@2.2.5" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec b/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec new file mode 100644 index 00000000000..5486b64dd2e --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec @@ -0,0 +1,16 @@ +Pod::Spec.new do |spec| + spec.name = 'kmmWebSocket' + spec.version = '1.0.1' + spec.homepage = 'https://www.cocoapods.org' + spec.source = { :git => "Not Published", :tag => "#{spec.version}" } + spec.authors = 'Ahmed Ibrahim' + spec.license = { :type => "MIT", :file => "LICENSE" } + spec.summary = 'A Kotlin Multiplatform WebSocket Library' + spec.static_framework = true + spec.vendored_frameworks = "kmmWebSocket.xcframework" + spec.libraries = "c++" + spec.module_name = "#{spec.name}_umbrella" + spec.ios.deployment_target = '11.0' +end + +# path -> build/XCFrameworks/release \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec.expected.json new file mode 100644 index 00000000000..930c5be1eac --- /dev/null +++ b/tests/packagedcode/data/cocoapods/podspec/kmmWebSocket.podspec.expected.json @@ -0,0 +1,46 @@ +[ + { + "type": "pods", + "namespace": null, + "name": "kmmWebSocket", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Objective-C", + "description": "A Kotlin Multiplatform WebSocket Library", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Ahmed Ibrahim", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://www.cocoapods.org", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "Not Published/issues/", + "code_view_url": "Not Published/tree/1.0.1", + "vcs_url": "Not Published", + "copyright": null, + "license_expression": "mit AND unknown", + "declared_license": ":type = MIT, :file = LICENSE", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://cocoapods.org/pods/kmmWebSocket", + "repository_download_url": "Not Published/archive/refs/tags/1.0.1.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/2/3/c/kmmWebSocket/1.0.1/kmmWebSocket.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/kmmWebSocket@1.0.1" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/cocoapods/podspec/nanopb.podspec.expected.json b/tests/packagedcode/data/cocoapods/podspec/nanopb.podspec.expected.json index e12d726cbaf..dd512dbb66f 100644 --- a/tests/packagedcode/data/cocoapods/podspec/nanopb.podspec.expected.json +++ b/tests/packagedcode/data/cocoapods/podspec/nanopb.podspec.expected.json @@ -7,20 +7,13 @@ "qualifiers": {}, "subpath": null, "primary_language": "Objective-C", - "description": "Protocol buffers with small code size.\n Nanopb is a small code-size Protocol Buffers implementation Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is especially suitable for use in Nanopb is a small code-size Protocol Buffers implementation Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is especially suitable for use in microcontrollers, but fits any memory restricted system.", + "description": "Protocol buffers with small code size.\nNanopb is a small code-size Protocol Buffers implementation\n in ansi C. It is especially suitable for use in\n microcontrollers, but fits any memory restricted system.", "release_date": null, "parties": [ { "type": "person", "role": "author", - "name": "Petteri Aimonen", - "email": null, - "url": null - }, - { - "type": "person", - "role": "email", - "name": null, + "name": "Petteri Aimonen ", "email": "jpa@nanopb.mail.kapsi.fi", "url": null } @@ -33,22 +26,21 @@ "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, + "bug_tracking_url": "https://github.com/nanopb/nanopb/issues/", + "code_view_url": "https://github.com/nanopb/nanopb/tree/1.30905.0", "vcs_url": "https://github.com/nanopb/nanopb.git", "copyright": null, "license_expression": "unknown", - "declared_license": ":type => zlib, :file => LICENSE.txt", + "declared_license": ":type = zlib, :file = LICENSE.txt", "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "https://github.com/nanopb/nanopb.git" - ], + "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pods/nanopb@1.30905.0", "repository_homepage_url": "https://cocoapods.org/pods/nanopb", - "repository_download_url": "https://github.com/nanopb/nanopb/archive/1.30905.0.zip", - "api_data_url": null + "repository_download_url": "https://github.com/nanopb/nanopb/archive/refs/tags/1.30905.0.zip", + "api_data_url": "https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/6/1/e/nanopb/1.30905.0/nanopb.podspec.json", + "datasource_id": "cocoapods_podspec", + "purl": "pkg:pods/nanopb@1.30905.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_cocoapods.py b/tests/packagedcode/test_cocoapods.py index 9deabd8c888..5293904b26f 100644 --- a/tests/packagedcode/test_cocoapods.py +++ b/tests/packagedcode/test_cocoapods.py @@ -9,11 +9,14 @@ import os -from packagedcode.cocoapods import Podspec -from packagedcode.cocoapods import PodfileLock -from packagedcode.cocoapods import PodspecJson +from packagedcode.cocoapods import get_urls +from packagedcode.cocoapods import PodspecHandler +from packagedcode.cocoapods import PodspecJsonHandler +from packagedcode.cocoapods import PodfileLockHandler from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES +from scancode.cli_test_utils import check_json_scan +from scancode.cli_test_utils import run_scan_click class TestCocoaPodspec(PackageTester): @@ -21,37 +24,107 @@ class TestCocoaPodspec(PackageTester): def test_cocoapods_can_detect_podspec(self): test_file = self.get_test_loc('cocoapods/podspec/BadgeHub.podspec') - assert Podspec.is_package_data_file(test_file) + assert PodspecHandler.is_datafile(test_file) def test_cocoapods_can_parse_BadgeHub(self): test_file = self.get_test_loc('cocoapods/podspec/BadgeHub.podspec') expected_loc = self.get_test_loc('cocoapods/podspec/BadgeHub.podspec.expected.json') - packages = Podspec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_parse_flutter_paytabs_bridge(self): + test_file = self.get_test_loc('cocoapods/podspec/flutter_paytabs_bridge.podspec') + expected_loc = self.get_test_loc('cocoapods/podspec/flutter_paytabs_bridge.podspec.expected.json') + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_parse_kmmWebSocket(self): + test_file = self.get_test_loc('cocoapods/podspec/kmmWebSocket.podspec') + expected_loc = self.get_test_loc('cocoapods/podspec/kmmWebSocket.podspec.expected.json') + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_cocoapods_can_parse_LoadingShimmer(self): test_file = self.get_test_loc('cocoapods/podspec/LoadingShimmer.podspec') - expected_loc = self.get_test_loc('cocoapods/podspec/LoadingShimmer.podspec.expected.json') - packages = Podspec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + expected_loc = self.get_test_loc('cocoapods/podspec/LoadingShimmer.podspec.expected.json', must_exist=False) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_cocoapods_can_parse_nanopb(self): test_file = self.get_test_loc('cocoapods/podspec/nanopb.podspec') - expected_loc = self.get_test_loc('cocoapods/podspec/nanopb.podspec.expected.json') - packages = Podspec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + expected_loc = self.get_test_loc('cocoapods/podspec/nanopb.podspec.expected.json', must_exist=False) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_parse_PayTabsSDK(self): + test_file = self.get_test_loc('cocoapods/podspec/PayTabsSDK.podspec') + expected_loc = self.get_test_loc('cocoapods/podspec/PayTabsSDK.podspec.expected.json', must_exist=False) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_parse_RxDataSources(self): + test_file = self.get_test_loc('cocoapods/podspec/RxDataSources.podspec') + expected_loc = self.get_test_loc('cocoapods/podspec/RxDataSources.podspec.expected.json') + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_cocoapods_can_parse_Starscream(self): test_file = self.get_test_loc('cocoapods/podspec/Starscream.podspec') expected_loc = self.get_test_loc('cocoapods/podspec/Starscream.podspec.expected.json') - packages = Podspec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_cocoapods_can_parse_SwiftLib(self): test_file = self.get_test_loc('cocoapods/podspec/SwiftLib.podspec') expected_loc = self.get_test_loc('cocoapods/podspec/SwiftLib.podspec.expected.json') - packages = Podspec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = PodspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_get_urls(self): + result = get_urls(name=None, version=None, homepage_url=None, vcs_url=None) + expected = { + 'api_data_url': None, + 'bug_tracking_url': None, + 'code_view_url': None, + 'repository_download_url': None, + 'repository_homepage_url': None, + } + assert expected == result + + result = get_urls(name='foo', version=None, homepage_url=None, vcs_url=None) + expected = { + 'api_data_url': None, + 'bug_tracking_url': None, + 'code_view_url': None, + 'repository_download_url': None, + 'repository_homepage_url': 'https://cocoapods.org/pods/foo', + } + assert expected == result + + result = get_urls(name='foo', version='1.2.3', homepage_url=None, vcs_url=None) + expected = { + 'api_data_url': 'https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/a/c/b/foo/1.2.3/foo.podspec.json', + 'bug_tracking_url': None, + 'code_view_url': None, + 'repository_download_url': None, + 'repository_homepage_url': 'https://cocoapods.org/pods/foo', + } + assert expected == result + + result = get_urls( + name='foo', + version='1.2.3', + homepage_url='https://home.org', + vcs_url='httsp://github.com/foo/bar.git', + ) + expected = { + 'api_data_url': 'https://raw.githubusercontent.com/CocoaPods/Specs/blob/master/Specs/a/c/b/foo/1.2.3/foo.podspec.json', + 'bug_tracking_url': 'httsp://github.com/foo/bar/issues/', + 'code_view_url': 'httsp://github.com/foo/bar/tree/1.2.3', + 'repository_download_url': 'httsp://github.com/foo/bar/archive/refs/tags/1.2.3.zip', + 'repository_homepage_url': 'https://cocoapods.org/pods/foo', + } + assert expected == result class TestCocoaPodspecJson(PackageTester): @@ -59,24 +132,71 @@ class TestCocoaPodspecJson(PackageTester): def test_cocoapods_can_detect_podspec_json(self): test_file = self.get_test_loc('cocoapods/podspec.json/FirebaseAnalytics.podspec.json') - assert PodspecJson.is_package_data_file(test_file) + assert PodspecJsonHandler.is_datafile(test_file) def test_cocoapods_can_parse_FirebaseAnalytics(self): test_file = self.get_test_loc('cocoapods/podspec.json/FirebaseAnalytics.podspec.json') expected_loc = self.get_test_loc('cocoapods/podspec.json/FirebaseAnalytics.podspec.json.expected.json') - packages = PodspecJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = PodspecJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) class TestCocoaPodfileLock(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_cocoapods_can_detect_podfile_lock(self): - test_file = self.get_test_loc('cocoapods/podfle.lock/braintree_ios_Podfile.lock') - assert PodfileLock.is_package_data_file(test_file) + test_file = self.get_test_loc('cocoapods/podfile.lock/braintree_ios_Podfile.lock') + assert PodfileLockHandler.is_datafile(test_file) def test_cocoapods_can_parse_braintree_ios(self): - test_file = self.get_test_loc('cocoapods/podfle.lock/braintree_ios_Podfile.lock') - expected_loc = self.get_test_loc('cocoapods/podfle.lock/braintree_ios_Podfile.lock.expected.json') - packages = PodfileLock.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + test_file = self.get_test_loc('cocoapods/podfile.lock/braintree_ios_Podfile.lock') + expected_loc = self.get_test_loc('cocoapods/podfile.lock/braintree_ios_Podfile.lock.expected.json') + packages = PodfileLockHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + +class TestCocoapodsEndToEndAssemble(PackageTester): + test_data_dir = os.path.join(os.path.dirname(__file__), 'data') + + def test_cocoapods_can_assemble_with_single_podspec(self): + test_file = self.get_test_loc('cocoapods/assemble/single-podspec') + expected_file = self.get_test_loc('cocoapods/assemble/single-podspec-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_assemble_with_multiple_podspec(self): + test_file = self.get_test_loc('cocoapods/assemble/multiple-podspec') + expected_file = self.get_test_loc('cocoapods/assemble/multiple-podspec-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_assemble_with_solo_podspec(self): + test_file = self.get_test_loc('cocoapods/assemble/solo/RxDataSources.podspec') + expected_file = self.get_test_loc('cocoapods/assemble/solo/RxDataSources.podspec-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_assemble_with_solo_podfile(self): + test_file = self.get_test_loc('cocoapods/assemble/solo/Podfile') + expected_file = self.get_test_loc('cocoapods/assemble/solo/Podfile-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_assemble_with_solo_podfile_lock(self): + test_file = self.get_test_loc('cocoapods/assemble/solo/Podfile.lock') + expected_file = self.get_test_loc('cocoapods/assemble/solo/Podfile.lock-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_cocoapods_can_assemble_with_many_podspecs_podfile_and_podfile_lock(self): + test_file = self.get_test_loc('cocoapods/assemble/many-podspecs') + expected_file = self.get_test_loc('cocoapods/assemble/many-podspecs-expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + From c8ec5d15708f40214c1a41ff4559894190ba83c4 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:36:24 +0200 Subject: [PATCH 15/36] Adopt new handler design for Conda We now have these data file handlers: * CondaYamlHandler * CondaMetaYamlHandler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/conda.py | 248 ++++++++---------- .../data/conda/meta.yaml.expected.json | 47 +++- tests/packagedcode/test_conda.py | 20 +- 3 files changed, 155 insertions(+), 160 deletions(-) diff --git a/src/packagedcode/conda.py b/src/packagedcode/conda.py index 557207b43be..44e7d918ff7 100644 --- a/src/packagedcode/conda.py +++ b/src/packagedcode/conda.py @@ -8,189 +8,161 @@ # import io -import logging -import sys -import attr import saneyaml - -from commoncode import filetype -from commoncode import fileutils - -from packagedcode import models from packageurl import PackageURL +from packagedcode import models +from packagedcode.pypi import BaseDependencyFileHandler """ -Parse Conda manifests, see https://docs.conda.io/en/latest/ +Handle Conda manifests and metadata, see https://docs.conda.io/en/latest/ +https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html +See https://repo.continuum.io/pkgs/free for examples. """ -TRACE = False - - -def logger_debug(*args): - pass - +# TODO: there are likely other package data files for Conda +# TODO: report platform -logger = logging.getLogger(__name__) -if TRACE: - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) +class CondaYamlHandler(BaseDependencyFileHandler): + # TODO: there are several other manifests worth adding + datasource_id = 'conda_yaml' + path_patterns = ('*conda.yaml', '*conda.yml',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Conda yaml manifest' + documentation_url = 'https://docs.conda.io/' - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - -@attr.s() -class CondaPackageData(models.PackageData): - default_type = 'conda' - default_web_baseurl = None - default_download_baseurl = 'https://repo.continuum.io/pkgs/free' - default_api_baseurl = None - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - if manifest_resource.name.lower().endswith(('.yaml', '.yml')): - # the root is either the parent or further up for yaml stored under - # a INFO dir - path = 'info/recipe.tar-extract/recipe/meta.yaml' - if manifest_resource.path.endswith(path): - for ancestor in manifest_resource.ancestors(codebase): - if ancestor.name == 'info': - root_dir = ancestor.parent(codebase) - return root_dir - return manifest_resource.parent(codebase) - else: - return manifest_resource +class CondaMetaYamlHandler(models.DatafileHandler): + datasource_id = 'conda_meta_yaml' + default_package_type = 'conda' + path_patterns = ('*/meta.yaml',) + description = 'Conda meta.yml manifest' + documentation_url = 'https://docs.conda.io/' @classmethod - def extra_root_dirs(cls): - return ['**/recipe.tar-extract/recipe'] - - def compute_normalized_license(self): - return models.compute_normalized_license(self.declared_license) + def get_conda_root(cls, resource, codebase): + """ + Return a root Resource given a meta.yaml ``resource``. + """ + # the root is either the parent or further up for yaml stored under + # an "info" dir. We support extractcode extraction. + # in a source repo it would be in /conda.recipe/meta.yaml + paths = ( + 'info/recipe.tar-extract/recipe/meta.yaml', + 'info/recipe/recipe/meta.yaml', + 'conda.recipe/meta.yaml', + ) + res = resource + for pth in paths: + if not res.path.endswith(pth): + continue + for _seg in pth.split('/'): + res = res.parent(codebase) + if not res: + break -@attr.s() -class Condayml(CondaPackageData, models.PackageDataFile): + return res - file_patterns = ('meta.yaml', 'META.yml',) - extensions = ('.yml', '.yaml',) + return resource.parent(codebase) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower().endswith(('.yaml', '.yml'))) + def assign_package_to_resources(cls, package, resource, codebase): + return super().assign_package_to_resources( + package=package, + resource=cls.get_conda_root(resource, codebase), + codebase=codebase, + ) @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - package_data = get_yaml_data(location) - - name = None - version = None - - # Handle the package element - package_element = package_data.get('package') - if package_element: - for key, value in package_element.items(): - if key == 'name': - name = value - elif key == 'version': - version = value + def parse(cls, location): + metayaml = get_meta_yaml_data(location) + package_element = metayaml.get('package') or {} + name = package_element.get('name') if not name: return + version = package_element.get('version') - package_manifest = cls( + package = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, - version=version or None, + version=version, ) - # Handle the source element - source_element = package_data.get('source') - if source_element: - for key, value in source_element.items(): - if key == 'url' and value: - package_manifest.download_url = value - elif key == 'sha256' and value: - package_manifest.sha256 = value - - # Handle the about element - about_element = package_data.get('about') - if about_element: - for key, value in about_element.items(): - if key == 'home' and value: - package_manifest.homepage_url = value - elif key == 'license' and value: - package_manifest.declared_license = value - elif key == 'summary' and value: - package_manifest.description = value - elif key == 'dev_url' and value: - package_manifest.vcs_url = value - - # Handle the about element - requirements_element = package_data.get('requirements') - if requirements_element: - for key, value in requirements_element.items(): - # Run element format is like: - # (u'run', [u'mccortex ==1.0', u'nextflow ==19.01.0', u'cortexpy ==0.45.7', u'kallisto ==0.44.0', u'bwa', u'pandas', u'progressbar2', u'python >=3.6'])]) - if key == 'run' and value and isinstance(value, (list, tuple)): - package_dependencies = [] - for dependency in value: - requirement = None - for splitter in ('==', '>=', '<=', '>', '<'): - if splitter in dependency: - splits = dependency.split(splitter) - # Replace the package name and keep the relationship and version - # For example: keep ==19.01.0 - requirement = dependency.replace(splits[0], '').strip() - dependency = splits[0].strip() - break - package_dependencies.append( - models.DependentPackage( - purl=PackageURL( - type='conda', name=dependency).to_string(), - extracted_requirement=requirement, - scope='dependencies', - is_runtime=True, - is_optional=False, - ) - ) - package_manifest.dependencies = package_dependencies - yield package_manifest - - -def get_yaml_data(location): + # FIXME: source is source, not download + source = metayaml.get('source') or {} + package.download_url = source.get('url') + package.sha256 = source.get('sha256') + + about = metayaml.get('about') or {} + package.homepage_url = about.get('home') + package.declared_license = about.get('license') + if package.declared_license: + package.license_expression = cls.compute_normalized_license(package) + package.description = about.get('summary') + package.vcs_url = about.get('dev_url') + + requirements = metayaml.get('requirements') or {} + for scope, reqs in requirements.items(): + # requirements format is like: + # (u'run', [u'mccortex ==1.0', u'nextflow ==19.01.0', u'cortexpy + # ==0.45.7', u'kallisto ==0.44.0', u'bwa', u'pandas', + # u'progressbar2', u'python >=3.6'])]) + for req in reqs: + name, _, requirement = req.partition(" ") + purl = PackageURL(type=cls.default_package_type, name=name) + package.dependencies.append( + models.DependentPackage( + purl=purl.to_string(), + extracted_requirement=requirement, + scope=scope, + is_runtime=True, + is_optional=False, + ) + ) + + yield package + + +def get_meta_yaml_data(location): """ - Get variables and parse the yaml file, replace the variable with the value and return dictionary. + Return a mapping of conda metadata loaded from a meta.yaml files. The format + support Jinja-based templating and we try a crude resolution of variables + before loading the data as YAML. """ + # FIXME: use Jinja to process these variables = get_variables(location) yaml_lines = [] - with io.open(location, encoding='utf-8') as loc: - for line in loc.readlines(): + with io.open(location, encoding='utf-8') as metayaml: + for line in metayaml: if not line: continue pure_line = line.strip() - if pure_line.startswith('{%') and pure_line.endswith('%}') and '=' in pure_line: + if ( + pure_line.startswith('{%') + and pure_line.endswith('%}') + and '=' in pure_line + ): continue + # Replace the variable with the value if '{{' in line and '}}' in line: for variable, value in variables.items(): line = line.replace('{{ ' + variable + ' }}', value) yaml_lines.append(line) + return saneyaml.load('\n'.join(yaml_lines)) def get_variables(location): """ - Conda yaml will have variables defined at the beginning of the file, the idea is to parse it and return a dictionary of the variable and value + Conda yaml will have variables defined at the beginning of the file, the + idea is to parse it and return a dictionary of the variable and value + For example: {% set version = "0.45.0" %} {% set sha256 = "bc7512f2eef785b037d836f4cc6faded457ac277f75c6e34eccd12da7c85258f" %} diff --git a/tests/packagedcode/data/conda/meta.yaml.expected.json b/tests/packagedcode/data/conda/meta.yaml.expected.json index ac502093af1..9965e1fb620 100644 --- a/tests/packagedcode/data/conda/meta.yaml.expected.json +++ b/tests/packagedcode/data/conda/meta.yaml.expected.json @@ -25,14 +25,32 @@ "license_expression": "unknown", "declared_license": "Apache Software", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ + { + "purl": "pkg:conda/pip", + "extracted_requirement": "", + "scope": "host", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/python", + "extracted_requirement": "", + "scope": "host", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, { "purl": "pkg:conda/mccortex", "extracted_requirement": "==1.0", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -41,7 +59,7 @@ { "purl": "pkg:conda/nextflow", "extracted_requirement": "==19.01.0", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -50,7 +68,7 @@ { "purl": "pkg:conda/cortexpy", "extracted_requirement": "==0.45.7", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -59,7 +77,7 @@ { "purl": "pkg:conda/kallisto", "extracted_requirement": "==0.44.0", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -67,8 +85,8 @@ }, { "purl": "pkg:conda/bwa", - "extracted_requirement": null, - "scope": "dependencies", + "extracted_requirement": "", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -76,8 +94,8 @@ }, { "purl": "pkg:conda/pandas", - "extracted_requirement": null, - "scope": "dependencies", + "extracted_requirement": "", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -85,8 +103,8 @@ }, { "purl": "pkg:conda/progressbar2", - "extracted_requirement": null, - "scope": "dependencies", + "extracted_requirement": "", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -95,16 +113,17 @@ { "purl": "pkg:conda/python", "extracted_requirement": ">=3.6", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:conda/abeona@0.45.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "conda_meta_yaml", + "purl": "pkg:conda/abeona@0.45.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_conda.py b/tests/packagedcode/test_conda.py index 9a2e9e98046..ccc2d383281 100644 --- a/tests/packagedcode/test_conda.py +++ b/tests/packagedcode/test_conda.py @@ -23,27 +23,31 @@ class TestConda(PackageTester): def test_parse_get_varialble(self): test_file = self.get_test_loc('conda/meta.yaml') results = conda.get_variables(test_file) - assert results == dict([(u'version', u'0.45.0'), (u'sha256', u'bc7512f2eef785b037d836f4cc6faded457ac277f75c6e34eccd12da7c85258f')]) + expected = { + 'version': '0.45.0', + 'sha256': 'bc7512f2eef785b037d836f4cc6faded457ac277f75c6e34eccd12da7c85258f', + } + assert results == expected - def test_get_yaml_data(self): + def test_get_meta_yaml_data(self): test_file = self.get_test_loc('conda/meta.yaml') - results = conda.get_yaml_data(test_file) + results = conda.get_meta_yaml_data(test_file) assert list(results.items())[0] == (u'package', dict([(u'name', u'abeona'), (u'version', u'0.45.0')])) def test_condayml_is_package_data_file(self): test_file = self.get_test_loc('conda/meta.yaml') - assert conda.Condayml.is_package_data_file(test_file) + assert conda.CondaMetaYamlHandler.is_datafile(test_file) def test_parse(self): test_file = self.get_test_loc('conda/meta.yaml') - package = conda.Condayml.recognize(test_file) + package = conda.CondaMetaYamlHandler.parse(test_file) expected_loc = self.get_test_loc('conda/meta.yaml.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_root_dir(self): test_file = self.get_test_loc('conda/requests-kerberos-0.8.0-py35_0.tar.bz2-extract/info/recipe.tar-extract/recipe/meta.yaml') test_dir = self.get_test_loc('conda/requests-kerberos-0.8.0-py35_0.tar.bz2-extract') codebase = Codebase(test_dir) - manifest_resource = codebase.get_resource_from_path(test_file, absolute=True) - proot = conda.CondaPackageData.get_package_root(manifest_resource, codebase) + resource = codebase.get_resource_from_path(test_file, absolute=True) + proot = conda.CondaMetaYamlHandler.get_conda_root(resource, codebase) assert proot.location == test_dir From f1a2cfa6d7ef1917c6372110a636ffaf8e67e414 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:38:16 +0200 Subject: [PATCH 16/36] Adopt new handler design for CRAN We now have this data file handler: * CranDescriptionFileHandler And we assemble it in a Package correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/cran.py | 210 ++++++++---------- .../data/cran/codetools/package.json.expected | 7 +- .../data/cran/geometry/package.json.expected | 7 +- tests/packagedcode/test_cran.py | 8 +- 4 files changed, 101 insertions(+), 131 deletions(-) diff --git a/src/packagedcode/cran.py b/src/packagedcode/cran.py index c51e0dd11f4..9275e4cafda 100644 --- a/src/packagedcode/cran.py +++ b/src/packagedcode/cran.py @@ -8,146 +8,114 @@ # import io -import logging -import attr import saneyaml - -from commoncode import filetype -from commoncode import fileutils -from packagedcode import models from packageurl import PackageURL +from packagedcode import models """ -Handle CRAN package. -R is a programming languages and CRAN its package repository. -https://cran.r-project.org/ +Handle CRAN packages. +R is a programming languages and CRAN is its package repository. +See https://cran.r-project.org/ """ -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - -@attr.s() -class CranPackageData(models.PackageData): - default_type = 'cran' - default_web_baseurl = 'https://cran.r-project.org/package=' - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - return '{}{}'.format(baseurl, self.name) - - -@attr.s() -class DescriptionFile(CranPackageData, models.PackageDataFile): - file_patterns = ('DESCRIPTION',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if `location` path is for a Cran DESCRIPTION file. - """ - return (filetype.is_file(location) - and fileutils.file_name(location) == 'DESCRIPTION') +class CranDescriptionFileHandler(models.DatafileHandler): + datasource_id = 'cran_description' + default_package_type = 'cran' + path_patterns = ('*/DESCRIPTION',) + default_primary_language = 'R' + description = 'CRAN package DESCRIPTION' + documentation_url = 'https://r-pkgs.org/description.html' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - package_data = get_yaml_data(location) - - name = package_data.get('Package') - if name: - parties = [] - maintainers = package_data.get('Maintainer') - if maintainers: - for maintainer in maintainers.split(',\n'): - maintainer_name, maintainer_email = get_party_info(maintainer) - if maintainer_name or maintainer_email: - parties.append( - models.Party( - name=maintainer_name, - role='maintainer', - email=maintainer_email, - ) - ) - authors = package_data.get('Author') - if authors: - for author in authors.split(',\n'): - author_name, author_email = get_party_info(author) - if author_name or author_email: - parties.append( - models.Party( - name=author_name, - role='author', - email=author_email, - ) - ) - package_dependencies = [] - dependencies = package_data.get('Depends') - if dependencies: - for dependency in dependencies.split(',\n'): - requirement = None - for splitter in ('==', '>=', '<=', '>', '<'): - if splitter in dependency: - splits = dependency.split(splitter) - # Replace the package name and keep the relationship and version - # For example: R (>= 2.1) - requirement = dependency.replace(splits[0], '').strip().strip(')').strip() - dependency = splits[0].strip().strip('(').strip() - break - package_dependencies.append( - models.DependentPackage( - purl=PackageURL( - type='cran', name=dependency).to_string(), - extracted_requirement=requirement, - scope='dependencies', - is_runtime=True, - is_optional=False, - ) + def parse(cls, location): + cran_desc = get_cran_description(location) + + name = cran_desc.get('Package') + if not name: + return + + parties = [] + maintainers = cran_desc.get('Maintainer') or '' + for maintainer in maintainers.split(',\n'): + maintainer_name, maintainer_email = get_party_info(maintainer) + if maintainer_name or maintainer_email: + parties.append( + models.Party( + name=maintainer_name, + role='maintainer', + email=maintainer_email, ) - yield cls( - name=name, - version=package_data.get('Version'), - description=package_data.get('Description', '') or package_data.get('Title', ''), - declared_license=package_data.get('License'), - parties=parties, - dependencies=package_dependencies, - # TODO: Let's handle the release date as a Date type - # release_date = package_data.get('Date/Publication'), + ) + + authors = cran_desc.get('Author') or '' + for author in authors.split(',\n'): + author_name, author_email = get_party_info(author) + if author_name or author_email: + parties.append( + models.Party( + name=author_name, + role='author', + email=author_email, + ) + ) + + package_dependencies = [] + dependencies = cran_desc.get('Depends') or '' + for dependency in dependencies.split(',\n'): + requirement = None + # TODO: IMHO we could do simpler and better here + + for splitter in ('==', '>=', '<=', '>', '<'): + if splitter in dependency: + splits = dependency.split(splitter) + # Replace the package name and keep the relationship and version + # For example: R (>= 2.1) + requirement = dependency.replace(splits[0], '').strip().strip(')').strip() + dependency = splits[0].strip().strip('(').strip() + break + + package_dependencies.append( + models.DependentPackage( + purl=PackageURL( + type='cran', name=dependency).to_string(), + extracted_requirement=requirement, + scope='dependencies', + is_runtime=True, + is_optional=False, + ) ) + declared_license=cran_desc.get('License') + license_expression = None + if declared_license: + license_expression = models.compute_normalized_license(declared_license) -@attr.s() -class CranPackage(CranPackageData, models.Package): - """ - A cran Package that is created out of one/multiple cran package - manifests. - """ + # TODO: Let's handle the release date as a Date type + # release_date = cran_desc.get('Date/Publication'), + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + name=name, + version=cran_desc.get('Version'), + # TODO: combine both together + description=cran_desc.get('Description', '') or cran_desc.get('Title', ''), + declared_license=declared_license, + license_expression=license_expression, + parties=parties, + dependencies=package_dependencies, + repository_homepage_url=f'https://cran.r-project.org/package={name}', + ) - @property - def manifests(self): - return [ - DescriptionFile - ] +# FIXME: THIS IS NOT YAML but RFC 822 -def get_yaml_data(location): +def get_cran_description(location): """ - Parse the yaml file and return the metadata in dictionary format. + Parse a CRAN DESCRIPTION file as YAML and return a mapping of metadata. """ yaml_lines = [] with io.open(location, encoding='utf-8') as loc: diff --git a/tests/packagedcode/data/cran/codetools/package.json.expected b/tests/packagedcode/data/cran/codetools/package.json.expected index 056e0c74361..58ba4deeecd 100644 --- a/tests/packagedcode/data/cran/codetools/package.json.expected +++ b/tests/packagedcode/data/cran/codetools/package.json.expected @@ -40,8 +40,8 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -54,9 +54,10 @@ "resolved_package": {} } ], - "purl": "pkg:cran/codetools@0.2-16", "repository_homepage_url": "https://cran.r-project.org/package=codetools", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cran_description", + "purl": "pkg:cran/codetools@0.2-16" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/cran/geometry/package.json.expected b/tests/packagedcode/data/cran/geometry/package.json.expected index f9b72afc06a..1d323775e7f 100644 --- a/tests/packagedcode/data/cran/geometry/package.json.expected +++ b/tests/packagedcode/data/cran/geometry/package.json.expected @@ -82,8 +82,8 @@ "license_expression": "gpl-3.0", "declared_license": "GPL (>= 3)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -96,9 +96,10 @@ "resolved_package": {} } ], - "purl": "pkg:cran/geometry@0.4.2", "repository_homepage_url": "https://cran.r-project.org/package=geometry", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cran_description", + "purl": "pkg:cran/geometry@0.4.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_cran.py b/tests/packagedcode/test_cran.py index 879762094b2..7398dfd5355 100644 --- a/tests/packagedcode/test_cran.py +++ b/tests/packagedcode/test_cran.py @@ -19,14 +19,14 @@ class TestCran(PackageTester): def test_parse_as_package(self): test_file = self.get_test_loc('cran/codetools/DESCRIPTION') - packages = cran.DescriptionFile.recognize(test_file) + packages = cran.CranDescriptionFileHandler.parse(test_file) expected_loc = self.get_test_loc( 'cran/codetools/package.json.expected') - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_as_package2(self): test_file = self.get_test_loc('cran/geometry/DESCRIPTION') - packages = cran.DescriptionFile.recognize(test_file) + packages = cran.CranDescriptionFileHandler.parse(test_file) expected_loc = self.get_test_loc( 'cran/geometry/package.json.expected') - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) From 2c416c0ab43a80d9ef767d779bd529ec4fc1d8a3 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 12:45:20 +0200 Subject: [PATCH 17/36] Adopt new handler design for Debian This is a major refactoring of how we handle Debian packages in archives, extracted or installed layouts. In particular copyright files are treated as a package data file. We now have these data file handlers: * DebianSourcePackageMetadataTarballHandler * DebianSourcePackageTarballHandler * DebianControlFileInExtractedDebHandler * DebianControlFileInSourceHandler * DebianDscFileHandler * DebianInstalledStatusDatabaseHandler * DebianDistrolessInstalledDatabaseHandler * DebianInstalledFilelistHandler * DebianInstalledMd5sumFilelistHandler * DebianMd5sumFilelistInPackageHandler * DebianCopyrightFileInSourceHandler * DebianCopyrightFileInPackageHandler * StandaloneDebianCopyrightFileHandler (no active for now) And we assemble these in Packages correctly. Signed-off-by: Philippe Ombredanne --- src/packagedcode/debian.py | 836 ++-- src/packagedcode/debian_copyright.py | 132 +- .../data/debian/basic-rootfs-expected.json | 786 +++- .../basic-rootfs-with-licenses-expected.json | 6 +- .../data/debian/basic/status.expected | 90 +- tests/packagedcode/data/debian/end-to-end.tgz | Bin 776 -> 1143 bytes .../data/debian/end-to-end.tgz.expected.json | 347 ++ .../mokutil copy.md5sums} | 0 .../mokutil-amd64.md5sums.expected.json | 86 + .../data/debian/files-md5sums/mokutil.md5sums | 5 + .../mokutil.md5sums.expected.json | 84 + .../fonts-sil-abyssinica.md5sums | 14 - ...libatk-adaptor-amd64.md5sums.expected.json | 95 + .../data/debian/mini-status/status.expected | 15 +- .../debian/ubuntu-var-lib-dpkg/expected.json | 3611 ++++++++++++----- tests/packagedcode/test_debian.py | 183 +- 16 files changed, 4754 insertions(+), 1536 deletions(-) create mode 100644 tests/packagedcode/data/debian/end-to-end.tgz.expected.json rename tests/packagedcode/data/debian/{missing-multi-arch/mokutil.md5sums => files-md5sums/mokutil copy.md5sums} (100%) create mode 100644 tests/packagedcode/data/debian/files-md5sums/mokutil-amd64.md5sums.expected.json create mode 100644 tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums create mode 100644 tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums.expected.json delete mode 100644 tests/packagedcode/data/debian/foreign-multi-arch/fonts-sil-abyssinica.md5sums create mode 100644 tests/packagedcode/data/debian/libatk-adaptor-amd64.md5sums.expected.json diff --git a/src/packagedcode/debian.py b/src/packagedcode/debian.py index 2ff67f7e57c..e4089e313ac 100644 --- a/src/packagedcode/debian.py +++ b/src/packagedcode/debian.py @@ -7,306 +7,624 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging import os +import logging +from pathlib import Path -import attr -from debian_inspector import debcon +from commoncode import fileutils +from debian_inspector.debcon import get_paragraph_data_from_file +from debian_inspector.debcon import get_paragraphs_data_from_file +from debian_inspector.package import DebArchive from packageurl import PackageURL -from commoncode import filetype from packagedcode import models +from packagedcode.utils import get_ancestor """ -Handle Debian packages. +Handle Debian package archives, control files and installed databases. """ -TRACE = False +SCANCODE_DEBUG_PACKAGE_API = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False) + +TRACE = SCANCODE_DEBUG_PACKAGE_API + +def logger_debug(*args): + pass logger = logging.getLogger(__name__) if TRACE: import sys - logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) + logging.basicConfig(stream=sys.stdout) logger.setLevel(logging.DEBUG) + def logger_debug(*args): + return logger.debug( + ' '.join(isinstance(a, str) and a or repr(a) for a in args) + ) -@attr.s() -class DebianPackage(models.PackageData, models.PackageDataFile): - file_patterns = ('*.control',) - extensions = ('.deb',) - filetypes = ('debian binary package',) - mimetypes = ('application/x-archive', 'application/vnd.debian.binary-package',) - default_type = 'deb' - - @property - def multi_arch(self): - """ - Multi-Arch value from a status or spec file. - """ - return self.extra_data.get('multi_arch') - - def set_multi_arch(self, value): - if value: - self.extra_data['multi_arch'] = value - def populate_installed_files(self, var_lib_dpkg_info_dir): - """ - Populate the installed_file attribute given a `var_lib_dpkg_info_dir` - path to a Debian /var/lib/dpkg/info directory. - """ - self.installed_files = self.get_list_of_installed_files(var_lib_dpkg_info_dir) +# TODO: add dependencies - def get_list_of_installed_files(self, var_lib_dpkg_info_dir): - """ - Return a list of InstalledFile given a `var_lib_dpkg_info_dir` path to a - Debian /var/lib/dpkg/info directory where .list and/or - .md5sums files can be found for a package name. - We first use the .md5sums file and switch to the .list file otherwise. - The .list files also contains directories. - """ - # Multi-Arch can be: foreign, same, allowed or empty - # We only need to adjust the md5sum path in the case of `same` - if self.multi_arch == 'same': - arch = ':{}'.format(self.qualifiers.get('arch')) +# TODO: introspect archive +class DebianDebPackageHandler(models.DatafileHandler): + datasource_id = 'debian_deb' + default_package_type = 'deb' + path_patterns = ('*.deb',) + filetypes = ('debian binary package',) + description = 'Debian binary package archive' + documentation_url = 'https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html' + + @classmethod + def parse(cls, location): + yield build_package_data_from_package_filename( + filename=fileutils.file_name(location), + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # only assign this resource + return super().assign_package_to_resources(package, resource, codebase) + + +# TODO: introspect archive +class DebianSourcePackageMetadataTarballHandler(models.DatafileHandler): + datasource_id = 'debian_source_metadata_tarball' + default_package_type = 'deb' + path_patterns = ('*.debian.tar.xz', '*.debian.tar.gz',) + filetypes = ('posix tar archive',) + description = 'Debian source package metadata archive' + documentation_url = 'https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html' + + @classmethod + def parse(cls, location): + # strip extension + filename, _, _ = location.rpartition('.tar') + yield build_package_data_from_package_filename( + filename=filename, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # only assign this resource + return super().assign_package_to_resources(package, resource, codebase) + + +# TODO: introspect archive +class DebianSourcePackageTarballHandler(models.DatafileHandler): + datasource_id = 'debian_original_source_tarball' + default_package_type = 'deb' + path_patterns = ('*.orig.tar.xz', '*.orig.tar.gz',) + filetypes = ('posix tar archive',) + description = 'Debian package original source archive' + documentation_url = 'https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html' + + @classmethod + def parse(cls, location): + # strip extension + filename, _, _ = location.rpartition('.tar') + yield build_package_data_from_package_filename( + filename=filename, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # only assign this resource + return super().assign_package_to_resources(package, resource, codebase) + + +# TODO: also look into neighboring md5sum and data.tarball copyright files!!! +class DebianControlFileInExtractedDebHandler(models.DatafileHandler): + datasource_id = 'debian_control_extracted_deb' + default_package_type = 'deb' + path_patterns = ('*/control.tar.gz-extract/control',) + description = 'Debian control file - extracted layout' + documentation_url = 'https://www.debian.org/doc/debian-policy/ch-controlfields.html' + + @classmethod + def parse(cls, location): + # TODO: we cannot know the distro from the name only + yield build_package_data( + debian_data=get_paragraph_data_from_file(location=location), + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # two levels up + root = resource.parent(codebase).parent(codebase) + if root: + return cls.assign_package_to_resources(package, root, codebase) + + +# TODO: also look into neighboring copyright files!!! +class DebianControlFileInSourceHandler(models.DatafileHandler): + datasource_id = 'debian_control_in_source' + default_package_type = 'deb' + path_patterns = ('*/debian/control',) + description = 'Debian control file - source layout' + documentation_url = 'https://www.debian.org/doc/debian-policy/ch-controlfields.html' + + @classmethod + def parse(cls, location): + # TODO: we cannot know the distro from the name only + # NOTE: a control file in a source repo or debina.tar tarball can contain more than one package + for debian_data in get_paragraphs_data_from_file(location=location): + yield build_package_data( + debian_data, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # two levels up + root = resource.parent(codebase).parent(codebase) + if root: + return cls.assign_package_to_resources(package, root, codebase) + + +class DebianDscFileHandler(models.DatafileHandler): + # See http://deb.debian.org/debian/pool/main/p/python-docutils/python-docutils_0.16+dfsg-4.dsc + # or http://ftp.debian.org/debian/pool/main/7/7kaa/7kaa_2.15.4p1+dfsg-1.dsc + # these are source control files + datasource_id = 'debian_source_control_dsc' + default_package_type = 'deb' + path_patterns = ('*.dsc',) + description = 'Debian source control file' + documentation_url = 'https://wiki.debian.org/dsc' + + @classmethod + def parse(cls, location): + # this is typically signed + debian_data = get_paragraph_data_from_file( + location=location, + remove_pgp_signature=True, + ) + yield build_package_data( + debian_data=debian_data, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # only assign this resource + return super().assign_package_to_resources(package, resource, codebase) + + +class DebianInstalledStatusDatabaseHandler(models.DatafileHandler): + datasource_id = 'debian_installed_status_db' + default_package_type = 'deb' + path_patterns = ('*var/lib/dpkg/status',) + description = 'Debian installed packages database' + documentation_url = 'https://www.debian.org/doc/debian-policy/ch-controlfields.html' + + @classmethod + def parse(cls, location): + # note that we do not know yet the distro at this stage + # we could get it... but we get that later during assemble() + for debian_data in get_paragraphs_data_from_file(location): + yield build_package_data( + debian_data, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # get the root resource of the rootfs + levels_up = len('var/lib/dpkg/status'.split('/')) + root_resource = get_ancestor( + levels_up=levels_up, + resource=resource, + codebase=codebase, + ) + + package_name = package_data.name + + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=resource.path, + ) + + package_file_references = [] + package_file_references.extend(package_data.file_references) + package_uid = package.package_uid + + dependent_packages = package_data.dependencies + if dependent_packages: + yield from models.Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=resource.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) + + # Multi-Arch can be: "foreign", "same", "allowed", "all", "optional" or + # empty/non-present. See https://wiki.debian.org/Multiarch/HOWTO + + # We only need to adjust the md5sum/list path in the case of `same` + qualifiers = package_data.qualifiers or {} + architecture = qualifiers.get('architecture') + + multi_arch = package_data.extra_data.get('multi_arch') + + if TRACE: + logger_debug(f' debian: assemble: multi_arch: {multi_arch}') + logger_debug(f' debian: assemble: architecture: {architecture}') + + if multi_arch == 'same': + arch_path = f':{architecture}' else: - arch = '' - - package_md5sum = '{}{}.md5sums'.format(self.name, arch) - md5sum_file = os.path.join(var_lib_dpkg_info_dir, package_md5sum) - - package_list = '{}{}.list'.format(self.name, arch) - list_file = os.path.join(var_lib_dpkg_info_dir, package_list) - - has_md5 = os.path.exists(md5sum_file) - has_list = os.path.exists(list_file) - - if not (has_md5 or has_list): - return [] - - installed_files = [] - directories = set() - if has_md5: - with open(md5sum_file) as info_file: - for line in info_file: - line = line.strip() - if not line: - continue - md5sum, _, path = line.partition(' ') - md5sum = md5sum.strip() - - path = path.strip() - if not path.startswith('/'): - path = '/' + path - - # we ignore dirs in general, and we ignore these that would - # be created a plain dir when we can - if path in ignored_root_dirs: - continue - - installed_file = models.PackageFile(path=path, md5=md5sum) - - installed_files.append(installed_file) - directories.add(os.path.dirname(path)) - - elif has_list: - with open(list_file) as info_file: - for line in info_file: - line = line.strip() - if not line: - continue - md5sum = None - path = line - - path = path.strip() - if not path.startswith('/'): - path = '/' + path - - # we ignore dirs in general, and we ignore these that would - # be created a plain dir when we can - if path in ignored_root_dirs: - continue - - installed_file = models.PackageFile(path=path, md5=md5sum) - if installed_file not in installed_files: - installed_files.append(installed_file) - directories.add(os.path.dirname(path)) - - # skip directories when possible - installed_files = [f for f in installed_files if f.path not in directories] - - return installed_files - - def get_copyright_file_path(self, root_dir): + arch_path = '' + + # collect .list, .md5sum, and copyright file for this package + # and assemble package data + assemblable_paths = tuple(set([ + # we try both with and without arch in path for multi-arch support + f'var/lib/dpkg/info/{package_name}.md5sums', + f'var/lib/dpkg/info/{package_name}{arch_path}.md5sums', + + f'var/lib/dpkg/info/{package_name}.list', + f'var/lib/dpkg/info/{package_name}{arch_path}.list', + + f'usr/share/doc/{package_name}/copyright', + ])) + # TODO: keep track of missing files + for res in root_resource.walk(codebase): + if not res.path.endswith(assemblable_paths): + continue + + for pkgdt in res.package_data: + package_data = models.PackageData.from_dict(pkgdt) + package.update( + package_data=package_data, + datafile_path=res.path, + ) + package_file_references.extend(package_data.file_references) + + res.for_packages.append(package_uid) + res.save(codebase) + + # yield possible dependencies + dependent_packages = package_data.dependencies + if dependent_packages: + yield from models.Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=res.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) + + # we yield this as we do not want this further processed + yield res + + root_path = Path(root_resource.path) + + # FIXME: should we consider ONLY the md5sums? + # merge references for the same path (e.g. .list amd .md5sum) + file_references_by_path = {} + for ref in package_file_references: + # a file ref extends from the root of the filesystem + ref_path = str(root_path / ref.path) + existing = file_references_by_path.get(ref_path) + if existing: + existing.update(ref) + else: + file_references_by_path[ref_path] = ref + + for res in root_resource.walk(codebase): + ref = file_references_by_path.get(res.path) + if not ref: + continue + + # path is found and processed: remove it, so we can check if we found all of them + del file_references_by_path[res.path] + res.for_packages.append(package_uid) + res.save(codebase) + + yield res + + # if we have left over file references, add these to extra data + if file_references_by_path: + missing = sorted(file_references_by_path.values(), key=lambda r:r.path) + package.extra_data['missing_file_references'] = missing + + yield package + + +class DebianDistrolessInstalledDatabaseHandler(models.DatafileHandler): + datasource_id = 'debian_distroless_installed_db' + default_package_type = 'deb' + path_patterns = ('*var/lib/dpkg/status.d/*',) + description = 'Debian distroless installed database' + documentation_url = 'https://www.debian.org/doc/debian-policy/ch-controlfields.html' + + @classmethod + def parse(cls, location): """ - Given a root_dir path to a filesystem root, return the path to a copyright file - for this Package + Yield installed PackageData objects given a ``location`` + var/lib/dpkg/status.d/ file as found in a distroless container + rootfs installation. distroless is derived from Debian but each package + has its own status file. """ - # We start by looking for a copyright file stored in a directory named after the - # package name. Otherwise we look for a copyright file stored in a source package - # name. - candidate_names = [self.name] - candidate_names.extend(PackageURL.from_string(sp).name for sp in self.source_packages) - - copyright_file = os.path.join(root_dir, 'usr/share/doc/{}/copyright') - - for name in candidate_names: - copyright_loc = copyright_file.format(name) - if os.path.exists(copyright_loc): - return copyright_loc - - -def get_installed_packages(root_dir, distro='debian', detect_licenses=False, **kwargs): + for debian_data in get_paragraphs_data_from_file(location): + yield build_package_data( + debian_data, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + distro='distroless', + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # get the root resource of the rootfs + levels_up = len('var/lib/dpkg/status.d/name'.split('/')) + root_resource = get_ancestor( + levels_up=levels_up, + resource=resource, + codebase=codebase, + ) + + package_name = package_data.name + + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=resource.path, + ) + package_uid = package.package_uid + + dependent_packages = package_data.dependencies + if dependent_packages: + yield from models.Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=resource.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ) + + # collect copyright file for this package + # and merge in package data + assemblable_paths = ( + f'usr/share/doc/{package_name}/copyright', + ) + for res in root_resource.walk(codebase): + if not res.path.endswith(assemblable_paths): + continue + + for pkgdt in res.package_data: + package.update( + package_data=pkgdt, + datafile_path=res.path, + ) + + res.for_packages.append(package_uid) + res.save(codebase) + + yield res + + yield package + + +class DebianInstalledFilelistHandler(models.DatafileHandler): + # seen in installed rootfs in: + # - /var/lib/dpkg/info/.list + datasource_id = 'debian_installed_files_list' + default_package_type = 'deb' + path_patterns = ( + '*var/lib/dpkg/info/*.list', + ) + description = 'Debian installed file paths list' + + @classmethod + def parse(cls, location): + return parse_debian_files_list( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # this is assembled only from a database entry + return + + +class DebianInstalledMd5sumFilelistHandler(models.DatafileHandler): + # seen in installed rootfs in: + # - /var/lib/dpkg/info/.md5sums + # - /var/lib/dpkg/info/.md5sums + datasource_id = 'debian_installed_md5sums' + default_package_type = 'deb' + path_patterns = ( + '*var/lib/dpkg/info/*.md5sums', + ) + description = 'Debian installed file MD5 and paths list' + documentation_url = 'https://www.debian.org/doc/manuals/debian-handbook/sect.package-meta-information.en.html#sect.configuration-scripts' + + @classmethod + def parse(cls, location): + return parse_debian_files_list( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # this is assembled only from a database entry + return [] + + +class DebianMd5sumFilelistInPackageHandler(models.DatafileHandler): + datasource_id = 'debian_md5sums_in_extracted_deb' + default_package_type = 'deb' + path_patterns = ( + # in .deb control tarball + '*/control.tar.gz-extract/md5sums', + '*/control.tar.xz-extract/md5sums', + ) + description = 'Debian file MD5 and paths list in .deb archive' + documentation_url = 'https://www.debian.org/doc/manuals/debian-handbook/sect.package-meta-information.en.html#sect.configuration-scripts' + + @classmethod + def parse(cls, location): + return parse_debian_files_list( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # two levels up + root = resource.parent(codebase).parent(codebase) + if root: + return cls.assign_package_to_resources(package, root, codebase) + + +def build_package_data_from_package_filename(filename, datasource_id, package_type,): """ - Yield installed Package objects given a ``root_dir`` rootfs directory. + Return a PackageData built from the filename of a Debian package archive. """ - base_status_file_loc = os.path.join(root_dir, 'var/lib/dpkg/status') - base_statusd_loc = os.path.join(root_dir, 'var/lib/dpkg/status.d/') - - if os.path.exists(base_status_file_loc): - var_lib_dpkg_info_dir = os.path.join(root_dir, 'var/lib/dpkg/info/') - - # guard from recursive import - from packagedcode import debian_copyright - - for package in parse_status_file(base_status_file_loc, distro=distro): - package.populate_installed_files(var_lib_dpkg_info_dir) - if detect_licenses: - copyright_location = package.get_copyright_file_path(root_dir) - dc = debian_copyright.parse_copyright_file(copyright_location) - if dc: - package.declared_license = dc.get_declared_license( - filter_duplicates=True, - skip_debian_packaging=True, - ) - package.license_expression = dc.get_license_expression( - skip_debian_packaging=True, - simplify_licenses=True, - ) - package.copyright = dc.get_copyright( - skip_debian_packaging=True, - unique_copyrights=True, - ) - yield package - - elif os.path.exists(base_statusd_loc): - for root, dirs, files in os.walk(base_statusd_loc): - for f in files: - status_file_loc = os.path.join(root, f) - for package in parse_status_file(status_file_loc, distro=distro): - yield package - - -def parse_status_file(location, distro='debian'): - """ - Yield Debian Package objects from a dpkg `status` file or None. - """ - if not os.path.exists(location): - raise FileNotFoundError('[Errno 2] No such file or directory: {}'.format(repr(location))) - if not filetype.is_file(location): - raise Exception(f'Location is not a file: {location}') - for debian_pkg_data in debcon.get_paragraphs_data_from_file(location): - yield build_package(debian_pkg_data, distro) + # TODO: we cannot know the distro from the name only + deb = DebArchive.from_filename(filename=filename) + if deb.architecture: + qualifiers = dict(architecture=deb.architecture) + else: + qualifiers = {} -def build_package(package_data, distro='debian'): - """ - Return a Package object from a package_data mapping (from a dpkg status file) - or None. - """ - # construct the package - package = DebianPackage() - package.namespace = distro - - # add debian-specific package 'qualifiers' - package.qualifiers = dict([ - ('arch', package_data.get('architecture')), - ]) - - package.set_multi_arch(package_data.get('multi-arch')) - - # mapping of top level `status` file items to the Package object field name - plain_fields = [ - ('description', 'description'), - ('homepage', 'homepage_url'), - ('installed-size', 'size'), - ('package', 'name'), - ('version', 'version'), - ('maintainer', 'maintainer'), - ] - - for source, target in plain_fields: - value = package_data.get(source) - if value: - if isinstance(value, str): - value = value.strip() - if value: - setattr(package, target, value) - - # mapping of top level `status` file items to a function accepting as - # arguments the package.json element value and returning an iterable of key, - # values Package Object to update - field_mappers = [ - ('section', keywords_mapper), - ('source', source_packages_mapper), - # ('depends', dependency_mapper), - ] - - for source, func in field_mappers: - logger.debug('parse: %(source)r, %(func)r' % locals()) - value = package_data.get(source) or None - if value: - func(value, package) - - # parties_mapper() need mutiple fields: - parties_mapper(package_data, package) - - return package - - -def keywords_mapper(keyword, package): - """ - Add `section` info as a list of keywords to a DebianPackage. - """ - package.keywords = [keyword] - return package + return models.PackageData( + datasource_id=datasource_id, + type=package_type, + name=deb.name, + version=deb.version, + qualifiers=qualifiers, + ) -def source_packages_mapper(source, package): +def parse_debian_files_list(location, datasource_id, package_type): """ - Add `source` info as a list of `purl`s to a DebianPackage. + Yield PackageData from a list of file paths at locations such as an from a + Debian installed .list or .md5sums file. """ - source_pkg_purl = PackageURL( - type=package.type, - name=source, - namespace=package.namespace - ).to_string() + qualifiers = {} + filename = fileutils.file_base_name(location) + if ':' in filename: + name, _, arch = filename.partition(':') + qualifiers['arch'] = arch + else: + name = filename + + file_references = [] + with open(location) as info_file: + for line in info_file: + line = line.strip() + if not line or line.startswith('#'): + continue + # for a plain file lits, the md5sum will be empty + md5sum, _, path = line.partition(' ') + path = path.strip() + md5sum = md5sum and md5sum.strip() or None + + # we ignore dirs in general, and we ignore these that would + # be created a plain dir when we can + if path in ignored_root_dirs: + continue + + ref = models.FileReference(path=path, md5=md5sum) + file_references.append(ref) + + if not file_references: + return + + yield models.PackageData( + datasource_id=datasource_id, + type=package_type, + name=name, + qualifiers=qualifiers, + file_references=file_references, + ) + + +def build_package_data(debian_data, datasource_id, package_type='deb', distro=None): + """ + Return a PackageData object from a package_data mapping (from a dpkg status + or similar file) or None. + """ + name = debian_data.get('package') + version = debian_data.get('version') - package.source_packages = [source_pkg_purl] + qualifiers = {} + architecture = debian_data.get('architecture') + if architecture: + qualifiers['architecture'] = architecture - return package + extra_data = {} + # Multi-Arch can be: "foreign", "same", "allowed", "all", "optional" or + # empty/non-present. See https://wiki.debian.org/Multiarch/HOWTO + multi_arch = debian_data.get('multi-arch') + if multi_arch: + extra_data['multi_arch'] = multi_arch + description = debian_data.get('description') + homepage_url = debian_data.get('homepage') + size = debian_data.get('installed') -def parties_mapper(package_data, package): - """ - add - """ parties = [] - maintainer = package_data.get('maintainer') - orig_maintainer = package_data.get('original_maintainer') - + maintainer = debian_data.get('maintainer') if maintainer: - parties.append(models.Party(role='maintainer', name=maintainer)) + party = models.Party(role='maintainer', name=maintainer) + parties.append(party) + orig_maintainer = debian_data.get('original_maintainer') if orig_maintainer: - parties.append(models.Party(role='original_maintainer', name=orig_maintainer)) - - package.parties = parties - - return package + party = models.Party(role='original_maintainer', name=orig_maintainer) + parties.append(party) + + keywords = [] + keyword = debian_data.get('section') + if keyword: + keywords.append(keyword) + + source_packages = [] + source = debian_data.get('source') + if source: + source_pkg_purl = PackageURL( + type=package_type, + name=source, + namespace=distro + ).to_string() + + source_packages.append(source_pkg_purl) + + return models.PackageData( + datasource_id=datasource_id, + type=package_type, + namespace=distro, + name=name, + version=version, + qualifiers=qualifiers, + description=description, + homepage_url=homepage_url, + size=size, + source_packages=source_packages, + keywords=keywords, + parties=parties, + extra_data=extra_data, + ) ignored_root_dirs = { diff --git a/src/packagedcode/debian_copyright.py b/src/packagedcode/debian_copyright.py index c66f6c590ca..3b6a3903737 100644 --- a/src/packagedcode/debian_copyright.py +++ b/src/packagedcode/debian_copyright.py @@ -27,11 +27,14 @@ from licensedcode.match import set_matched_lines from licensedcode.models import Rule from licensedcode.spans import Span -from packagedcode.utils import combine_expressions +from packagedcode import models from packagedcode.licensing import get_license_expression_from_matches from packagedcode.licensing import get_license_matches from packagedcode.licensing import get_license_matches_from_query_string +from packagedcode.utils import combine_expressions from textcode.analysis import unicode_text +import fnmatch +from pathlib import Path """ Detect licenses and copyright in Debian copyright files. Can handle dep-5 @@ -51,7 +54,6 @@ TRACE = os.environ.get('SCANCODE_DEBUG_PACKAGE', False) -MATCHER_UNKNOWN = '5-unknown' def logger_debug(*args): @@ -69,19 +71,120 @@ def logger_debug(*args): ' '.join(isinstance(a, str) and a or repr(a) for a in args) ) +MATCHER_UNKNOWN = '5-unknown' + +class BaseDebianCopyrightFileHandler(models.DatafileHandler): + default_package_type = 'deb' + documentation_url = 'https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/' + + @classmethod + def is_datafile(cls, location, filetypes=tuple(), strict=False): + isdc = ( + super().is_datafile(location, filetypes=filetypes) + # we want the filename to be lowercase + and location.endswith('copyright') + ) + if isdc: + if strict: + text = unicode_text(location) + return EnhancedDebianCopyright.is_machine_readable_copyright(text) + else: + return True + + @classmethod + def compute_normalized_license(cls, package): + return + + @classmethod + def parse(cls, location): + dc = parse_copyright_file(location) + # TODO: collect the upstream source package details + + # find a name... TODO: this should be pushed down to each handler + if fnmatch.fnmatch(name=location, pat='*usr/share/doc/*/copyright'): + path = Path(location) + name = path.parent.name + else: + # no name otherwise for now + name = None + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + name=name, + declared_license=dc.get_declared_license(), + license_expression=dc.get_license_expression(), + copyright=dc.get_copyright(), + ) + + +class DebianCopyrightFileInSourceHandler(BaseDebianCopyrightFileHandler): + datasource_id = 'debian_copyright_in_source' + description = 'Debian machine readable file in source' + + path_patterns = ( + # Seen in a source repo or in *.debian.tar.xz tarball + # See https://github.com/Debian/dcs/blob/c88c75b9fb776b9d3075698716af8c0fd8d7558f/debian/copyright ] + # See http://deb.debian.org/debian/pool/main/p/python-docutils/python-docutils_0.16+dfsg-4.debian.tar.xz + '*/debian/copyright', + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # two levels up + root = resource.parent(codebase).parent(codebase) + if root: + return cls.assign_package_to_resources(package, root, codebase) + + +# TODO: distiguish the cased of an installed package vs. the case of an extracted .deb +class DebianCopyrightFileInPackageHandler(BaseDebianCopyrightFileHandler): + datasource_id = 'debian_copyright_in_package' + description = 'Debian machine readable file in source' + + path_patterns = ( + # Standard form when seen in an installed form in /usr/share/doc/ + # and in the same place in the data.tar.xz inner archive of a .deb archive + # See http://ftp.us.debian.org/debian/pool/main/p/python-docutils/python3-docutils_0.16+dfsg-4_all.deb + '*usr/share/doc/*/copyright', + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # DO NOTHING: let other handler reuse this + return [] + + +class StandaloneDebianCopyrightFileHandler(BaseDebianCopyrightFileHandler): + datasource_id = 'debian_copyright_standalone' + description = 'Debian machine readable file standalone' + + path_patterns = ( + # other places... may be we should treat this strictly wrt. being a structure file only? + '*/copyright', + # Seen in http://metadata.ftp-master.debian.org/changelogs/main/d/dtrx/dtrx_8.2.2-1_copyright + '*_copyright', + ) + + @classmethod + def assemble(cls, package_data, resource, codebase): + # assemble is the default + yield from super().assemble(package_data, resource, codebase) + class NotReallyStructuredCopyrightFile(Exception): """ - Raised when a file has a dep5 format declared, but is really not structured + Raised when a file has a dep5, machine readable copyrigh file format + declared, but is not strictly structured. """ def parse_copyright_file(location, check_consistency=False): """ Return a DebianDetector Object containing copyright and license detections - extracted from the debain copyright file at `location`. + extracted from the debian copyright file at ``location``. - If `check_consistency` is True, check if debian copyright file is + If ``check_consistency`` is True, check if debian copyright file is consistently structured according to the guidelines specified at https://www.debian.org/doc/packaging-manuals/copyright-format/1.0 """ @@ -158,28 +261,28 @@ def from_file(cls, *args, **kwargs): """ Return a DebianDetector object with License and Copyright detections. """ - return NotImplementedError + raise NotImplementedError def get_copyright(self, *args, **kwargs): """ Return a copyright string (found in Copyright: structured fields or in plain text). """ - return NotImplementedError + raise NotImplementedError def get_license_expression(self, *args, **kwargs): """ Return a license expression string suitable to use as a - DebianPackage.license_expression. + PackageData.license_expression. """ - return NotImplementedError + raise NotImplementedError def get_declared_license(self, *args, **kwargs): """ Return a list of declared license string suitable to use as a - DebianPackage.declared_license. + PackageData.declared_license. """ - return NotImplementedError + raise NotImplementedError @attr.s @@ -525,7 +628,7 @@ def get_license_expression( If `skip_debian_packaging` is True, skips the declared license for `Files: debian/*` paragraph. - If `simplify_licenses` is True, license expressions are deduplicated by + If `simplify_licenses` is True, license expressions are deduplicated by Licensing.dedup() and then returned. """ if not self.license_detections: @@ -1213,7 +1316,10 @@ def is_all_licenses_expressions_parsable(self): return True def get_all_license_expressions(self): - + """ + Return a list of all the license expressions detected in this copyright + file. + """ license_expressions = [] for paragraph in self.debian_copyright.paragraphs: diff --git a/tests/packagedcode/data/debian/basic-rootfs-expected.json b/tests/packagedcode/data/debian/basic-rootfs-expected.json index 46878f8cb91..27487b89244 100644 --- a/tests/packagedcode/data/debian/basic-rootfs-expected.json +++ b/tests/packagedcode/data/debian/basic-rootfs-expected.json @@ -1,164 +1,636 @@ -[ - { - "type": "deb", - "namespace": "debian", - "name": "libncurses5", - "version": "6.1-1ubuntu1.18.04", - "qualifiers": { - "arch": "amd64" - }, - "subpath": null, - "primary_language": null, - "description": "shared libraries for terminal handling\n The ncurses library routines are a terminal-independent method of\n updating character screens with reasonable optimization.\n .\n This package contains the shared libraries necessary to run programs\n compiled with ncurses.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Ubuntu Developers ", - "email": null, - "url": null - } - ], - "keywords": [ - "libs" - ], - "homepage_url": "https://invisible-island.net/ncurses/", - "download_url": null, - "size": "283", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "pkg:deb/debian/ncurses" - ], - "installed_files": [ - { - "path": "/lib/x86_64-linux-gnu/libncurses.so.5.9", - "size": 0, - "sha1": null, - "md5": "23c8a935fa4fc7290d55cc5df3ef56b1", - "sha256": null, - "sha512": null +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true }, - { - "path": "/usr/lib/x86_64-linux-gnu/libform.so.5.9", - "size": 0, - "sha1": null, - "md5": "98b70f283324e89db5787a018a54adf4", - "sha256": null, - "sha512": null + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 5 + } + } + ], + "dependencies": [], + "packages": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": "6.1-1ubuntu1.18.04", + "qualifiers": { + "architecture": "amd64" }, - { - "path": "/usr/lib/x86_64-linux-gnu/libmenu.so.5.9", - "size": 0, - "sha1": null, - "md5": "e3a0f5154928da2da234920343ac14b2", - "sha256": null, - "sha512": null + "subpath": null, + "primary_language": null, + "description": "shared libraries for terminal handling\n The ncurses library routines are a terminal-independent method of\n updating character screens with reasonable optimization.\n .\n This package contains the shared libraries necessary to run programs\n compiled with ncurses.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "https://invisible-island.net/ncurses/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/ncurses" + ], + "extra_data": { + "multi_arch": "same", + "missing_file_references": [ + { + "path": "lib/x86_64-linux-gnu/libncurses.so.5.9", + "size": 0, + "sha1": null, + "md5": "23c8a935fa4fc7290d55cc5df3ef56b1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libform.so.5.9", + "size": 0, + "sha1": null, + "md5": "98b70f283324e89db5787a018a54adf4", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libmenu.so.5.9", + "size": 0, + "sha1": null, + "md5": "e3a0f5154928da2da234920343ac14b2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libpanel.so.5.9", + "size": 0, + "sha1": null, + "md5": "a927e7d76753bb85f5a784b653d337d2", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] }, - { - "path": "/usr/lib/x86_64-linux-gnu/libpanel.so.5.9", - "size": 0, - "sha1": null, - "md5": "a927e7d76753bb85f5a784b653d337d2", - "sha256": null, - "sha512": null - } - ], - "extra_data": { - "multi_arch": "same" - }, - "dependencies": [], - "purl": "pkg:deb/debian/libncurses5@6.1-1ubuntu1.18.04?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - }, - { - "type": "deb", - "namespace": "debian", - "name": "libndp0", - "version": "1.4-2ubuntu0.16.04.1", - "qualifiers": { - "arch": "amd64" + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "basic-rootfs.tar.gz/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64" }, - "subpath": null, - "primary_language": null, - "description": "Library for Neighbor Discovery Protocol\n libndp is a library for the IPv6 Neighbor Discovery Protocol (NDP). It\n contains functions for building and parsing NDP messages, and provides\n a high-level interface for sending and receiving NDP messages on a\n network interface.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Ubuntu Developers ", - "email": null, - "url": null - } - ], - "keywords": [ - "libs" - ], - "homepage_url": "http://libndp.org", - "download_url": null, - "size": "41", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [ - "pkg:deb/debian/libndp" - ], - "installed_files": [ - { - "path": "/usr/lib/x86_64-linux-gnu/libndp.so.0.0.2", - "size": 0, - "sha1": null, - "md5": "5d26434efecc08048ab72357af804ef7", - "sha256": null, - "sha512": null + { + "type": "deb", + "namespace": null, + "name": "libndp0", + "version": "1.4-2ubuntu0.16.04.1", + "qualifiers": { + "architecture": "amd64" }, - { - "path": "/usr/share/doc/libndp0/changelog.Debian.gz", - "size": 0, - "sha1": null, - "md5": "60d977e0c9a9fb07c1f8ae3090ea6f48", - "sha256": null, - "sha512": null + "subpath": null, + "primary_language": null, + "description": "Library for Neighbor Discovery Protocol\n libndp is a library for the IPv6 Neighbor Discovery Protocol (NDP). It\n contains functions for building and parsing NDP messages, and provides\n a high-level interface for sending and receiving NDP messages on a\n network interface.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "http://libndp.org", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/libndp" + ], + "extra_data": { + "multi_arch": "same", + "missing_file_references": [ + { + "path": "usr/lib/x86_64-linux-gnu/libndp.so.0.0.2", + "size": 0, + "sha1": null, + "md5": "5d26434efecc08048ab72357af804ef7", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libndp0/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "60d977e0c9a9fb07c1f8ae3090ea6f48", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] }, - { - "path": "/usr/share/doc/libndp0/copyright", - "size": 0, - "sha1": null, - "md5": "3f4ecdd67d5b9427cdc66847bdd11cf4", - "sha256": null, - "sha512": null - } - ], - "extra_data": { - "multi_arch": "same" + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "basic-rootfs.tar.gz/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64" + } + ], + "files": [ + { + "path": "basic-rootfs.tar.gz", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share/doc", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share/doc/libncurses5", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share/doc/libncurses5/copyright", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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": "Copyright (c) 1998-2016 Free Software Foundation, Inc.\nCopyright (c) 2001 by Pradeep Padala\nCopyright (c) 1994 X Consortium\nCopyright (c) 1980, 1991, 1992, 1993 The Regents of the University of California\nCopyright 1996-2007 by Thomas E. Dickey", + "license_expression": "x11-fsf AND x11-xconsortium AND bsd-new AND x11-fsf", + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_copyright_in_package", + "purl": "pkg:deb/libncurses5" + } + ], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share/doc/libndp0", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/usr/share/doc/libndp0/copyright", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libndp0", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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": "Copyright 2013 Jiri Pirko \nCopyright 2014 Andrew Ayer ", + "license_expression": "(lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1) AND (lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1)", + "declared_license": [ + "LGPL-2.1+", + "LGPL-2.1+", + "LGPL-2.1+" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_copyright_in_package", + "purl": "pkg:deb/libndp0" + } + ], + "for_packages": [ + "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var/lib", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var/lib/dpkg", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var/lib/dpkg/info", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var/lib/dpkg/info/libncurses5:amd64.md5sums", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": null, + "qualifiers": { + "arch": "amd64" + }, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "lib/x86_64-linux-gnu/libncurses.so.5.9", + "size": 0, + "sha1": null, + "md5": "23c8a935fa4fc7290d55cc5df3ef56b1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libform.so.5.9", + "size": 0, + "sha1": null, + "md5": "98b70f283324e89db5787a018a54adf4", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libmenu.so.5.9", + "size": 0, + "sha1": null, + "md5": "e3a0f5154928da2da234920343ac14b2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libpanel.so.5.9", + "size": 0, + "sha1": null, + "md5": "a927e7d76753bb85f5a784b653d337d2", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/libncurses5?arch=amd64" + } + ], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "basic-rootfs.tar.gz/var/lib/dpkg/info/libndp0:amd64.md5sums", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libndp0", + "version": null, + "qualifiers": { + "arch": "amd64" + }, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "usr/lib/x86_64-linux-gnu/libndp.so.0.0.2", + "size": 0, + "sha1": null, + "md5": "5d26434efecc08048ab72357af804ef7", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libndp0/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "60d977e0c9a9fb07c1f8ae3090ea6f48", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libndp0/copyright", + "size": 0, + "sha1": null, + "md5": "3f4ecdd67d5b9427cdc66847bdd11cf4", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/libndp0?arch=amd64" + } + ], + "for_packages": [ + "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] }, - "dependencies": [], - "purl": "pkg:deb/debian/libndp0@1.4-2ubuntu0.16.04.1?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } -] \ No newline at end of file + { + "path": "basic-rootfs.tar.gz/var/lib/dpkg/status", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": "6.1-1ubuntu1.18.04", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "shared libraries for terminal handling\n The ncurses library routines are a terminal-independent method of\n updating character screens with reasonable optimization.\n .\n This package contains the shared libraries necessary to run programs\n compiled with ncurses.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "https://invisible-island.net/ncurses/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/ncurses" + ], + "file_references": [], + "extra_data": { + "multi_arch": "same" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64" + }, + { + "type": "deb", + "namespace": null, + "name": "libndp0", + "version": "1.4-2ubuntu0.16.04.1", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "Library for Neighbor Discovery Protocol\n libndp is a library for the IPv6 Neighbor Discovery Protocol (NDP). It\n contains functions for building and parsing NDP messages, and provides\n a high-level interface for sending and receiving NDP messages on a\n network interface.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "http://libndp.org", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/libndp" + ], + "file_references": [], + "extra_data": { + "multi_arch": "same" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64" + } + ], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/debian/basic-rootfs-with-licenses-expected.json b/tests/packagedcode/data/debian/basic-rootfs-with-licenses-expected.json index f115c25831d..5812e4ec5b7 100644 --- a/tests/packagedcode/data/debian/basic-rootfs-with-licenses-expected.json +++ b/tests/packagedcode/data/debian/basic-rootfs-with-licenses-expected.json @@ -37,11 +37,10 @@ "license_expression": "x11-fsf AND x11-xconsortium AND bsd-new", "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:deb/debian/ncurses" ], - "installed_files": [ + "file_references": [ { "path": "/lib/x86_64-linux-gnu/libncurses.so.5.9", "size": 0, @@ -124,11 +123,10 @@ "LGPL-2.1+" ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:deb/debian/libndp" ], - "installed_files": [ + "file_references": [ { "path": "/usr/lib/x86_64-linux-gnu/libndp.so.0.0.2", "size": 0, diff --git a/tests/packagedcode/data/debian/basic/status.expected b/tests/packagedcode/data/debian/basic/status.expected index 42108b9fee9..3564cd7cd10 100644 --- a/tests/packagedcode/data/debian/basic/status.expected +++ b/tests/packagedcode/data/debian/basic/status.expected @@ -1,11 +1,11 @@ [ { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "libncurses5", "version": "6.1-1ubuntu1.18.04", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -25,7 +25,7 @@ ], "homepage_url": "https://invisible-island.net/ncurses/", "download_url": null, - "size": "283", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -37,26 +37,27 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/ncurses" + "pkg:deb/ncurses" ], + "file_references": [], "extra_data": { "multi_arch": "same" }, "dependencies": [], - "purl": "pkg:deb/ubuntu/libncurses5@6.1-1ubuntu1.18.04?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64" }, { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "libcom-err2", "version": "1.44.1-1ubuntu1.1", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -76,7 +77,7 @@ ], "homepage_url": "http://e2fsprogs.sourceforge.net", "download_url": null, - "size": "87", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -88,26 +89,27 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/e2fsprogs" + "pkg:deb/e2fsprogs" ], + "file_references": [], "extra_data": { "multi_arch": "same" }, "dependencies": [], - "purl": "pkg:deb/ubuntu/libcom-err2@1.44.1-1ubuntu1.1?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libcom-err2@1.44.1-1ubuntu1.1?architecture=amd64" }, { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "libapt-pkg5.0", "version": "1.6.11", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -127,7 +129,7 @@ ], "homepage_url": null, "download_url": null, - "size": "3139", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -139,26 +141,27 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/apt" + "pkg:deb/apt" ], + "file_references": [], "extra_data": { "multi_arch": "same" }, "dependencies": [], - "purl": "pkg:deb/ubuntu/libapt-pkg5.0@1.6.11?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libapt-pkg5.0@1.6.11?architecture=amd64" }, { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "libaudit1", "version": "1:2.8.2-1ubuntu1", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -178,7 +181,7 @@ ], "homepage_url": "https://people.redhat.com/sgrubb/audit/", "download_url": null, - "size": "147", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -190,26 +193,27 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/audit" + "pkg:deb/audit" ], + "file_references": [], "extra_data": { "multi_arch": "same" }, "dependencies": [], - "purl": "pkg:deb/ubuntu/libaudit1@1:2.8.2-1ubuntu1?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libaudit1@1:2.8.2-1ubuntu1?architecture=amd64" }, { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "perl-base", "version": "5.26.1-6ubuntu0.3", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -229,7 +233,7 @@ ], "homepage_url": "http://dev.perl.org/perl5/", "download_url": null, - "size": "7826", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -241,24 +245,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/perl" + "pkg:deb/perl" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:deb/ubuntu/perl-base@5.26.1-6ubuntu0.3?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/perl-base@5.26.1-6ubuntu0.3?architecture=amd64" }, { "type": "deb", - "namespace": "ubuntu", + "namespace": null, "name": "libudev1", "version": "237-3ubuntu10.22", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -278,7 +283,7 @@ ], "homepage_url": "https://www.freedesktop.org/wiki/Software/systemd", "download_url": null, - "size": "227", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -290,17 +295,18 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/ubuntu/systemd" + "pkg:deb/systemd" ], + "file_references": [], "extra_data": { "multi_arch": "same" }, "dependencies": [], - "purl": "pkg:deb/ubuntu/libudev1@237-3ubuntu10.22?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libudev1@237-3ubuntu10.22?architecture=amd64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/debian/end-to-end.tgz b/tests/packagedcode/data/debian/end-to-end.tgz index 2c1aa0dd6d1f0b4bc2236f5b09065f7acaa262bf..b47cec9e6dc92b1c2271319acb56a8ce2727e484 100644 GIT binary patch literal 1143 zcmV--1c>_|iwFP!000001MQkYZ`(E$$9>kP;IRc}g``N)Hrk-Wde{!die=lipefoW zB2fYGNw03OAR<`>607HgIk&pWGk&mQuGrbs`7#t9sw^t%KS--9rkc2W! zx!^S9BQ#;j0P#~B*3$S|I)n!DR$6cDLTY=H1_nz)@a*FSn`1ArH$@$SDE|1q4x{ND$y{(d2y zK4CA|U;l&?4Ep!Mz5ZFLPSgkX*Pl@i@qaHo)c-#4JLbFJKmNxwCCm7~Hg;B?vLk^0 zt?DO@0S*}dNgMxz|DT?f{-@jn+F$<^ClLSj!bbhW%|hGe7#jcwtp5`xVEx|*u>L=9 zw)uZ0tWBJ^=qeZ+7$l=hbn*`44XWpB`}x+Q^yv|4#AWGwax2f6574 z>VK>lbR(euM*U}{D_$)APhtM=1DOBMo1OgsnROgA{@>02#~On+a_0VjBYQgk6;JH{ zE%i^*gmvHl3E2Pbg;xJw_WyU)pV4mrpApc%4_5kT)%E;TonR0BL)_n;|Kb$(|9jzq z{_R=o2|B_4`g2Ud|9jzE{nx$$n8+eaSzKh?H-$gAj;Gdtj6XX6ql6O<>%Tro)tIP6 zk`b4hPq9eZG)piUDvCCP~5&j z`fJ+Qx%QeQIcI*4e6UjS5{a$_$mW2sKqEL;g8Zp-!nnb`%WJ z+IsYlsTas;>4P}aTz5JZ=8J4?j3X4c^&5|>rSwRZoirZR!K!asV71cTw+7ZFa*aim zE9XuYJ_-*Ol?gg8D_qS7(XVBptFBKi>bmliix5}b7;l0pL*w)C5@M_Ci@W?6(eKX8 zyOyqZl3$!Ob97a--S3U^?e$%zr$*Yibo0v}c02|E000000000000000004kv@GrCu J9yI_^001;bP;CGJ literal 776 zcmV+j1NZzNiwFQmfLC7t1MQVfkJLC2hWqSaQAdzA=_Iz3bPGlxI4lRWhz736v7NL< zVn_bq>({T7o`x1M%mK|Jw0_hrTXwnp+EuPdEi!L1sl|44R}_(^p-Wpfw76`~Y)afz zv~HRb<4sZGvLPFwcc$oq;5@Sco7qgAm4e-5cia3Qiu@Y?co9ChJJ@3ha9xv|;$Px| zd=q~{NU?$94zzs7|2+OL7=OnGxrb48ng{Eoqv)_^!XA{4motuF-krNrpchsdtNf=u znAt0%*@zC3FTK@?L(k5p*+G4do~st4=S*oI|I+T^br-Y`@KnB+qnV|3@F1*1nOKH0 zp&Sp+JsOqsE+)P*KvE@hQ<7UA|zibjULC?eJRkqCR!LdoAg9(<$>Fd*=H*tqm zT%DI$d2(0gWt$fSJ(Y9Je76esO817sy@x+Ay#Lo?!E3m8^$@DOB=^xv86{0$RuA)3 zMR$%{HJ|Rn9a+qmWzI6Iq=VjA@X}5yUKt#j7NgPwf>%d*)_QIH39JcGP8^6XfPGn& zDJ@pTQhS)BKNi0|9?S+dCPW~_Kftrsdj~+lyfS2 zEPGmaB`nW>`?0Ox)+CDsD}2lb9WHVucP6L#4(-~mDf(FJaYbai6CG{Zh81PYC}E-} z0KwVqP0nI%oX(ykW<^g+N_JH%SQURbb_+}}<0a{;pL>cWIh;MQUDe1&#B8Ft>ss1V z*0iLnDHa$v;ucRc({en!`rUC#Boc{4B9TZW5{X12kw_#Gi9{liNF)-8+xQoGM_Vxf GC;$NF@P9S{ diff --git a/tests/packagedcode/data/debian/end-to-end.tgz.expected.json b/tests/packagedcode/data/debian/end-to-end.tgz.expected.json new file mode 100644 index 00000000000..096cbb16871 --- /dev/null +++ b/tests/packagedcode/data/debian/end-to-end.tgz.expected.json @@ -0,0 +1,347 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 6 + } + } + ], + "dependencies": [], + "packages": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": "6.1-1ubuntu1", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "shared libraries for terminal handling\n The ncurses library routines are a terminal-independent method of\n updating character screens with reasonable optimization.\n .\n This package contains the shared libraries necessary to run programs\n compiled with ncurses.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "https://invisible-island.net/ncurses/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/ncurses" + ], + "extra_data": { + "multi_arch": "same" + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "end-to-end.tgz/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64" + } + ], + "files": [ + { + "path": "end-to-end.tgz", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/lib", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/lib/x86_64-linux-gnu", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/lib/x86_64-linux-gnu/libncurses.so.5.9", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/lib", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/lib/x86_64-linux-gnu", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/lib/x86_64-linux-gnu/libform.so.5.9", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/lib/x86_64-linux-gnu/libmenu.so.5.9", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/lib/x86_64-linux-gnu/libpanel.so.5.9", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/share", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/usr/share/doc", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var/lib", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var/lib/dpkg", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var/lib/dpkg/info", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var/lib/dpkg/info/libncurses5:amd64.md5sums", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": null, + "qualifiers": { + "arch": "amd64" + }, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "lib/x86_64-linux-gnu/libncurses.so.5.9", + "size": 0, + "sha1": null, + "md5": "6c91c3a185ae5b0764bd3019c7aceddc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libform.so.5.9", + "size": 0, + "sha1": null, + "md5": "741024ffeb87886243c049e507bea509", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libmenu.so.5.9", + "size": 0, + "sha1": null, + "md5": "307c46447fdee4ae0459aa98bf74eaf1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/libpanel.so.5.9", + "size": 0, + "sha1": null, + "md5": "613820edd4f95050a7cde4aec0dde01c", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/libncurses5?arch=amd64" + } + ], + "for_packages": [ + "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "end-to-end.tgz/var/lib/dpkg/status", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "libncurses5", + "version": "6.1-1ubuntu1", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "shared libraries for terminal handling\n The ncurses library routines are a terminal-independent method of\n updating character screens with reasonable optimization.\n .\n This package contains the shared libraries necessary to run programs\n compiled with ncurses.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "libs" + ], + "homepage_url": "https://invisible-island.net/ncurses/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:deb/ncurses" + ], + "file_references": [], + "extra_data": { + "multi_arch": "same" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/libncurses5@6.1-1ubuntu1?architecture=amd64" + } + ], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/debian/missing-multi-arch/mokutil.md5sums b/tests/packagedcode/data/debian/files-md5sums/mokutil copy.md5sums similarity index 100% rename from tests/packagedcode/data/debian/missing-multi-arch/mokutil.md5sums rename to tests/packagedcode/data/debian/files-md5sums/mokutil copy.md5sums diff --git a/tests/packagedcode/data/debian/files-md5sums/mokutil-amd64.md5sums.expected.json b/tests/packagedcode/data/debian/files-md5sums/mokutil-amd64.md5sums.expected.json new file mode 100644 index 00000000000..d56b01e15dd --- /dev/null +++ b/tests/packagedcode/data/debian/files-md5sums/mokutil-amd64.md5sums.expected.json @@ -0,0 +1,86 @@ +[ + { + "type": "deb", + "namespace": null, + "name": "mockutil", + "version": null, + "qualifiers": { + "arch": "amd64" + }, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "usr/bin/mokutil", + "size": 0, + "sha1": null, + "md5": "7a1a2629613d260e43dabc793bebdf19", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/bash-completion/completions/mokutil", + "size": 0, + "sha1": null, + "md5": "9086049384eaf0360dca4371ca50acbf", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/mokutil/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "b3f4bb874bd61e4609823993857b9c17", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/mokutil/copyright", + "size": 0, + "sha1": null, + "md5": "24dd593b630976a785b4c5ed097bbd96", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/mokutil.1.gz", + "size": 0, + "sha1": null, + "md5": "b608675058a943d834129b6972b8509a", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/mockutil?arch=amd64" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums b/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums new file mode 100644 index 00000000000..d11a8923447 --- /dev/null +++ b/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums @@ -0,0 +1,5 @@ +7a1a2629613d260e43dabc793bebdf19 usr/bin/mokutil +9086049384eaf0360dca4371ca50acbf usr/share/bash-completion/completions/mokutil +b3f4bb874bd61e4609823993857b9c17 usr/share/doc/mokutil/changelog.Debian.gz +24dd593b630976a785b4c5ed097bbd96 usr/share/doc/mokutil/copyright +b608675058a943d834129b6972b8509a usr/share/man/man1/mokutil.1.gz diff --git a/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums.expected.json b/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums.expected.json new file mode 100644 index 00000000000..8ba456b8142 --- /dev/null +++ b/tests/packagedcode/data/debian/files-md5sums/mokutil.md5sums.expected.json @@ -0,0 +1,84 @@ +[ + { + "type": "deb", + "namespace": null, + "name": "mokutil", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "usr/bin/mokutil", + "size": 0, + "sha1": null, + "md5": "7a1a2629613d260e43dabc793bebdf19", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/bash-completion/completions/mokutil", + "size": 0, + "sha1": null, + "md5": "9086049384eaf0360dca4371ca50acbf", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/mokutil/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "b3f4bb874bd61e4609823993857b9c17", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/mokutil/copyright", + "size": 0, + "sha1": null, + "md5": "24dd593b630976a785b4c5ed097bbd96", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/mokutil.1.gz", + "size": 0, + "sha1": null, + "md5": "b608675058a943d834129b6972b8509a", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/mokutil" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/debian/foreign-multi-arch/fonts-sil-abyssinica.md5sums b/tests/packagedcode/data/debian/foreign-multi-arch/fonts-sil-abyssinica.md5sums deleted file mode 100644 index f3ea8a5af1e..00000000000 --- a/tests/packagedcode/data/debian/foreign-multi-arch/fonts-sil-abyssinica.md5sums +++ /dev/null @@ -1,14 +0,0 @@ -7faf213b3c06e818b9976cc2ae5af51a usr/share/bug/fonts-sil-abyssinica/presubj -672370efca8bffa183e2828907e0365d usr/share/bug/fonts-sil-abyssinica/script -ea72ae1d2ba5471ef54b132c79b1a03b usr/share/doc/fonts-sil-abyssinica/OFL-FAQ.txt.gz -f497d6bfc7ca4d423d703fabb7ff2e4c usr/share/doc/fonts-sil-abyssinica/README.Debian -7f81bc6ed7506b95af01b5eef76662bb usr/share/doc/fonts-sil-abyssinica/changelog.Debian.gz -13d9a840b6db71f7060670be0aafa953 usr/share/doc/fonts-sil-abyssinica/copyright -0e4a5ad6839067740e81a3e1244b0b16 usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILGraphiteFontFeatures.odt -8fee9c92ecd425c71217418b8370c5ae usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILGraphiteFontFeatures.pdf.gz -2cc8cbe21730258dd03a465e045066cc usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILOpenTypeFontFeatures.pdf.gz -40948ce7d8e4b1ba1c7043ec8926edf9 usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILTypeSample.pdf.gz -36ca1d62ca7365216e8bda952d2461e6 usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILTypeTunerGuide.pdf.gz -491295c116dbcb74bcad2d78a56aedbe usr/share/doc/fonts-sil-abyssinica/documentation/DOCUMENTATION.txt -bea5aeeb76a15c2c1b8189d1b2437b31 usr/share/doc/fonts-sil-abyssinica/documentation/SILEthiopicPrivateUseAreaBlock.pdf.gz -9e3d4310af3892a739ba7b1189c44dca usr/share/fonts/truetype/abyssinica/AbyssinicaSIL-R.ttf diff --git a/tests/packagedcode/data/debian/libatk-adaptor-amd64.md5sums.expected.json b/tests/packagedcode/data/debian/libatk-adaptor-amd64.md5sums.expected.json new file mode 100644 index 00000000000..b1d531aaf22 --- /dev/null +++ b/tests/packagedcode/data/debian/libatk-adaptor-amd64.md5sums.expected.json @@ -0,0 +1,95 @@ +[ + { + "type": "deb", + "namespace": null, + "name": "libatk-adaptor", + "version": null, + "qualifiers": { + "arch": "amd64" + }, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "usr/lib/gnome-settings-daemon-3.0/gtk-modules/at-spi2-atk.desktop", + "size": 0, + "sha1": null, + "md5": "34900bd11562f427776ed2c05ba6002d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/unity-settings-daemon-1.0/gtk-modules/at-spi2-atk.desktop", + "size": 0, + "sha1": null, + "md5": "34900bd11562f427776ed2c05ba6002d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libatk-bridge.so", + "size": 0, + "sha1": null, + "md5": "6ddbc10b64afe708945c3b1497714aaa", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libatk-adaptor/NEWS.gz", + "size": 0, + "sha1": null, + "md5": "3a24add33624132b6b3b4c2ed08a4394", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libatk-adaptor/README", + "size": 0, + "sha1": null, + "md5": "452c2e9db46c9ac92a10e700d116b120", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/libatk-adaptor/copyright", + "size": 0, + "sha1": null, + "md5": "971e4b2093741db8c51d263cd5c3ee48", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/libatk-adaptor?arch=amd64" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/debian/mini-status/status.expected b/tests/packagedcode/data/debian/mini-status/status.expected index 7a60b49ce79..f37dce23e4a 100644 --- a/tests/packagedcode/data/debian/mini-status/status.expected +++ b/tests/packagedcode/data/debian/mini-status/status.expected @@ -1,11 +1,11 @@ [ { "type": "deb", - "namespace": "debian", + "namespace": null, "name": "perl-base", "version": "5.22.1-9ubuntu0.6", "qualifiers": { - "arch": "amd64" + "architecture": "amd64" }, "subpath": null, "primary_language": null, @@ -25,7 +25,7 @@ ], "homepage_url": "http://dev.perl.org/perl5/", "download_url": null, - "size": "7096", + "size": null, "sha1": null, "md5": null, "sha256": null, @@ -37,15 +37,16 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ - "pkg:deb/debian/perl" + "pkg:deb/perl" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:deb/debian/perl-base@5.22.1-9ubuntu0.6?arch=amd64", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/perl-base@5.22.1-9ubuntu0.6?architecture=amd64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/debian/ubuntu-var-lib-dpkg/expected.json b/tests/packagedcode/data/debian/ubuntu-var-lib-dpkg/expected.json index daf7b2298a6..0250e778957 100644 --- a/tests/packagedcode/data/debian/ubuntu-var-lib-dpkg/expected.json +++ b/tests/packagedcode/data/debian/ubuntu-var-lib-dpkg/expected.json @@ -1,925 +1,2702 @@ -[ - { - "type": "deb", - "namespace": "ubuntu", - "name": "base-files", - "version": "11ubuntu5", - "qualifiers": { - "arch": "amd64" - }, - "subpath": null, - "primary_language": null, - "description": "Debian base system miscellaneous files\n This package contains the basic filesystem hierarchy of a Debian system, and\n several important miscellaneous files, such as /etc/debian_version,\n /etc/host.conf, /etc/issue, /etc/motd, /etc/profile, and others,\n and the text of several common licenses in use on Debian systems.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Ubuntu Developers ", - "email": null, - "url": null - } - ], - "keywords": [ - "admin" - ], - "homepage_url": null, - "download_url": null, - "size": "390", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [ - { - "path": "/etc/debian_version", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/default/motd-news", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/dpkg/origins/debian", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/dpkg/origins/ubuntu", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/host.conf", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/issue", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/issue.net", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/legal", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/lsb-release", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/profile.d/01-locale-fix.sh", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/update-motd.d/00-header", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/update-motd.d/10-help-text", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/update-motd.d/50-motd-news", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/lib/systemd/system/motd-news.service", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/lib/systemd/system/motd-news.timer", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/bin/locale-check", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/lib/os-release", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/dot.bashrc", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/dot.profile", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/dot.profile.md5sums", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/info.dir", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/motd", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/networks", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/profile", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/profile.md5sums", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-files/staff-group-for-usr-local", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/Apache-2.0", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/Artistic", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/BSD", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/CC0-1.0", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GFDL-1.2", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GFDL-1.3", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GPL-1", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GPL-2", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GPL-3", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/LGPL-2", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/LGPL-2.1", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/LGPL-3", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/MPL-1.1", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/MPL-2.0", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/dict", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-files/README", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-files/README.FHS", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-files/changelog.gz", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-files/copyright", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/lintian/overrides/base-files", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/etc/os-release", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GFDL", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/GPL", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/common-licenses/LGPL", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-files/FAQ", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 6 } - ], - "extra_data": { - "multi_arch": "foreign" + } + ], + "dependencies": [], + "packages": [ + { + "type": "deb", + "namespace": null, + "name": "base-files", + "version": "11ubuntu5", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "Debian base system miscellaneous files\n This package contains the basic filesystem hierarchy of a Debian system, and\n several important miscellaneous files, such as /etc/debian_version,\n /etc/host.conf, /etc/issue, /etc/motd, /etc/profile, and others,\n and the text of several common licenses in use on Debian systems.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "admin" + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": { + "multi_arch": "foreign", + "missing_file_references": [ + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/.", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/base-files@11ubuntu5?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "ubuntu-var-lib-dpkg/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/base-files@11ubuntu5?architecture=amd64" }, - "dependencies": [], - "purl": "pkg:deb/ubuntu/base-files@11ubuntu5?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - }, - { - "type": "deb", - "namespace": "ubuntu", - "name": "base-passwd", - "version": "3.5.47", - "qualifiers": { - "arch": "amd64" + { + "type": "deb", + "namespace": null, + "name": "base-passwd", + "version": "3.5.47", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "Debian base system master password and group files\n These are the canonical master copies of the user database files\n (/etc/passwd and /etc/group), containing the Debian-allocated user and\n group IDs. The update-passwd tool is provided to keep the system databases\n synchronized with these master files.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Colin Watson ", + "email": null, + "url": null + } + ], + "keywords": [ + "admin" + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": { + "multi_arch": "foreign", + "missing_file_references": [ + { + "path": "usr/sbin/update-passwd", + "size": 0, + "sha1": null, + "md5": "151c5933546d90b0c6de9ba305d62f0e", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/base-passwd/group.master", + "size": 0, + "sha1": null, + "md5": "eee0dc6a097ceaab6fd938092bc4b86c", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/base-passwd/passwd.master", + "size": 0, + "sha1": null, + "md5": "47f32e500f784c3a1793aa2aa6fc5c31", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc-base/users-and-groups", + "size": 0, + "sha1": null, + "md5": "cdac90d3d3ef8d60e4bc0eb73efa68d7", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/README", + "size": 0, + "sha1": null, + "md5": "504775da5bdbb321fcb9f47562a45b57", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/changelog.gz", + "size": 0, + "sha1": null, + "md5": "1c6403ff29b43b43a67bbc75bd9576b3", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/copyright", + "size": 0, + "sha1": null, + "md5": "8eb6cd60f247ab06801038c6daf03f05", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/users-and-groups.html", + "size": 0, + "sha1": null, + "md5": "4bfe6b64d2007e5cf366a124bacb55b1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/users-and-groups.txt.gz", + "size": 0, + "sha1": null, + "md5": "d8e20ac4dd13bb84d0fdfd203aa9b1dc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/lintian/overrides/base-passwd", + "size": 0, + "sha1": null, + "md5": "8dc658a3a1b2fe714b45d245439bca24", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/de/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "1a3f08c04ae471580efcde9ea0936369", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/es/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "5ccedf3c81ac83de429e982ab2b07cdf", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/fr/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "bbf6c14f5296de0a6752d5972137d28f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/ja/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "084c4f1c22b6d3fbf086fa8fce013dff", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "b4b1ebf4b0260cb3a4d19e5b733e4479", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/pl/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "011317bc9fdf4d1be3fa6a6b6851fcd2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/ru/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "977fb42cbcfa775d302b5ca4955c328c", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/base-passwd@3.5.47?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "ubuntu-var-lib-dpkg/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/base-passwd@3.5.47?architecture=amd64" }, - "subpath": null, - "primary_language": null, - "description": "Debian base system master password and group files\n These are the canonical master copies of the user database files\n (/etc/passwd and /etc/group), containing the Debian-allocated user and\n group IDs. The update-passwd tool is provided to keep the system databases\n synchronized with these master files.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Colin Watson ", - "email": null, - "url": null - } - ], - "keywords": [ - "admin" - ], - "homepage_url": null, - "download_url": null, - "size": "233", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [ - { - "path": "/usr/sbin/update-passwd", - "size": 0, - "sha1": null, - "md5": "151c5933546d90b0c6de9ba305d62f0e", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-passwd/group.master", - "size": 0, - "sha1": null, - "md5": "eee0dc6a097ceaab6fd938092bc4b86c", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/base-passwd/passwd.master", - "size": 0, - "sha1": null, - "md5": "47f32e500f784c3a1793aa2aa6fc5c31", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc-base/users-and-groups", - "size": 0, - "sha1": null, - "md5": "cdac90d3d3ef8d60e4bc0eb73efa68d7", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-passwd/README", - "size": 0, - "sha1": null, - "md5": "504775da5bdbb321fcb9f47562a45b57", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-passwd/changelog.gz", - "size": 0, - "sha1": null, - "md5": "1c6403ff29b43b43a67bbc75bd9576b3", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-passwd/copyright", - "size": 0, - "sha1": null, - "md5": "8eb6cd60f247ab06801038c6daf03f05", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-passwd/users-and-groups.html", - "size": 0, - "sha1": null, - "md5": "4bfe6b64d2007e5cf366a124bacb55b1", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/base-passwd/users-and-groups.txt.gz", - "size": 0, - "sha1": null, - "md5": "d8e20ac4dd13bb84d0fdfd203aa9b1dc", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/lintian/overrides/base-passwd", - "size": 0, - "sha1": null, - "md5": "8dc658a3a1b2fe714b45d245439bca24", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/de/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "1a3f08c04ae471580efcde9ea0936369", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/es/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "5ccedf3c81ac83de429e982ab2b07cdf", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/fr/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "bbf6c14f5296de0a6752d5972137d28f", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/ja/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "084c4f1c22b6d3fbf086fa8fce013dff", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "b4b1ebf4b0260cb3a4d19e5b733e4479", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/pl/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "011317bc9fdf4d1be3fa6a6b6851fcd2", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/ru/man8/update-passwd.8.gz", - "size": 0, - "sha1": null, - "md5": "977fb42cbcfa775d302b5ca4955c328c", - "sha256": null, - "sha512": null - } - ], - "extra_data": { - "multi_arch": "foreign" + { + "type": "deb", + "namespace": null, + "name": "bash", + "version": "5.0-6ubuntu1", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "GNU Bourne Again SHell\n Bash is an sh-compatible command language interpreter that executes\n commands read from the standard input or from a file. Bash also\n incorporates useful features from the Korn and C shells (ksh and csh).\n .\n Bash is ultimately intended to be a conformant implementation of the\n IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).\n .\n The Programmable Completion Code, by Ian Macdonald, is now found in\n the bash-completion package.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "shells" + ], + "homepage_url": "http://tiswww.case.edu/php/chet/bash/bashtop.html", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": { + "multi_arch": "foreign", + "missing_file_references": [ + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/.", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "bin/bash", + "size": 0, + "sha1": null, + "md5": "77506afebd3b7e19e937a678a185b62e", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/bin/bashbug", + "size": 0, + "sha1": null, + "md5": "1c77d2031971b4e4c512ac952102cd85", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/bin/clear_console", + "size": 0, + "sha1": null, + "md5": "ca6d248a913ad0eb1d7301a2b6f8147b", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/COMPAT.gz", + "size": 0, + "sha1": null, + "md5": "f55e3a16959b0bb8915cb5f219521c80", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/INTRO.gz", + "size": 0, + "sha1": null, + "md5": "ab78b78be766692463cb112b88d5a74f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/NEWS.gz", + "size": 0, + "sha1": null, + "md5": "ea9dd4d5a6822115b9134609ab6c1cfd", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/POSIX.gz", + "size": 0, + "sha1": null, + "md5": "f3bbcb9d46d417ff8291421f567fca19", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/RBASH", + "size": 0, + "sha1": null, + "md5": "172188e3a6fc5409d4f113485cc6d79f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.Debian.gz", + "size": 0, + "sha1": null, + "md5": "6bd7de8b98911613a536e83867e9b490", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.abs-guide", + "size": 0, + "sha1": null, + "md5": "5dac7b9b6332d9845e315cf8fd50ea89", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.commands.gz", + "size": 0, + "sha1": null, + "md5": "007dea9b8141f038c602b23f78509e34", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.gz", + "size": 0, + "sha1": null, + "md5": "4b69f2196038772f358bf6cf4f3a2d2d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "481042f46ec4ec8ae86901df48efa598", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/copyright", + "size": 0, + "sha1": null, + "md5": "9632d707e9eca8b3ba2b1a98c1c3fdce", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/inputrc.arrows", + "size": 0, + "sha1": null, + "md5": "244319c9dd88c980910aacd76477b8d9", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/lintian/overrides/bash", + "size": 0, + "sha1": null, + "md5": "4574de6676d74019761f409168aa8e01", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/bash.1.gz", + "size": 0, + "sha1": null, + "md5": "b3da2a5522496f6ca42d5c00a4e65d74", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/bashbug.1.gz", + "size": 0, + "sha1": null, + "md5": "ab8320c478c9d17caaa4d86e113cf0a2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/clear_console.1.gz", + "size": 0, + "sha1": null, + "md5": "0c912132bdbce02861669392deb3f84c", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/rbash.1.gz", + "size": 0, + "sha1": null, + "md5": "6ad61b838c1370d3bed5d4410644f34a", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man7/bash-builtins.7.gz", + "size": 0, + "sha1": null, + "md5": "b2fb88f251700c29d638d9202e89a693", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/menu/bash", + "size": 0, + "sha1": null, + "md5": "0c05a14279f95fdb4618a4ccaa469681", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/bash@5.0-6ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "ubuntu-var-lib-dpkg/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/bash@5.0-6ubuntu1?architecture=amd64" }, - "dependencies": [], - "purl": "pkg:deb/ubuntu/base-passwd@3.5.47?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - }, - { - "type": "deb", - "namespace": "ubuntu", - "name": "bash", - "version": "5.0-6ubuntu1", - "qualifiers": { - "arch": "amd64" + { + "type": "deb", + "namespace": null, + "name": "tar", + "version": "1.30+dfsg-7", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "GNU version of the tar archiving utility\n Tar is a program for packaging a set of files as a single archive in tar\n format. The function it performs is conceptually similar to cpio, and to\n things like PKZIP in the DOS world. It is heavily used by the Debian package\n management system, and is useful for performing system backups and exchanging\n sets of files with others.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "utils" + ], + "homepage_url": "https://www.gnu.org/software/tar/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": { + "multi_arch": "foreign" + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:deb/tar@1.30%2Bdfsg-7?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "ubuntu-var-lib-dpkg/var/lib/dpkg/status" + ], + "datasource_ids": [ + "debian_installed_status_db" + ], + "purl": "pkg:deb/tar@1.30%2Bdfsg-7?architecture=amd64" + } + ], + "files": [ + { + "path": "ubuntu-var-lib-dpkg", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] }, - "subpath": null, - "primary_language": null, - "description": "GNU Bourne Again SHell\n Bash is an sh-compatible command language interpreter that executes\n commands read from the standard input or from a file. Bash also\n incorporates useful features from the Korn and C shells (ksh and csh).\n .\n Bash is ultimately intended to be a conformant implementation of the\n IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).\n .\n The Programmable Completion Code, by Ian Macdonald, is now found in\n the bash-completion package.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Ubuntu Developers ", - "email": null, - "url": null - } - ], - "keywords": [ - "shells" - ], - "homepage_url": "http://tiswww.case.edu/php/chet/bash/bashtop.html", - "download_url": null, - "size": "1656", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [ - { - "path": "/bin/bash", - "size": 0, - "sha1": null, - "md5": "77506afebd3b7e19e937a678a185b62e", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/bin/bashbug", - "size": 0, - "sha1": null, - "md5": "1c77d2031971b4e4c512ac952102cd85", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/bin/clear_console", - "size": 0, - "sha1": null, - "md5": "ca6d248a913ad0eb1d7301a2b6f8147b", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/COMPAT.gz", - "size": 0, - "sha1": null, - "md5": "f55e3a16959b0bb8915cb5f219521c80", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/INTRO.gz", - "size": 0, - "sha1": null, - "md5": "ab78b78be766692463cb112b88d5a74f", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/NEWS.gz", - "size": 0, - "sha1": null, - "md5": "ea9dd4d5a6822115b9134609ab6c1cfd", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/POSIX.gz", - "size": 0, - "sha1": null, - "md5": "f3bbcb9d46d417ff8291421f567fca19", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/RBASH", - "size": 0, - "sha1": null, - "md5": "172188e3a6fc5409d4f113485cc6d79f", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/README.Debian.gz", - "size": 0, - "sha1": null, - "md5": "6bd7de8b98911613a536e83867e9b490", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/README.abs-guide", - "size": 0, - "sha1": null, - "md5": "5dac7b9b6332d9845e315cf8fd50ea89", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/README.commands.gz", - "size": 0, - "sha1": null, - "md5": "007dea9b8141f038c602b23f78509e34", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/README.gz", - "size": 0, - "sha1": null, - "md5": "4b69f2196038772f358bf6cf4f3a2d2d", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/changelog.Debian.gz", - "size": 0, - "sha1": null, - "md5": "481042f46ec4ec8ae86901df48efa598", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/copyright", - "size": 0, - "sha1": null, - "md5": "9632d707e9eca8b3ba2b1a98c1c3fdce", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/doc/bash/inputrc.arrows", - "size": 0, - "sha1": null, - "md5": "244319c9dd88c980910aacd76477b8d9", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/lintian/overrides/bash", - "size": 0, - "sha1": null, - "md5": "4574de6676d74019761f409168aa8e01", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man1/bash.1.gz", - "size": 0, - "sha1": null, - "md5": "b3da2a5522496f6ca42d5c00a4e65d74", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man1/bashbug.1.gz", - "size": 0, - "sha1": null, - "md5": "ab8320c478c9d17caaa4d86e113cf0a2", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man1/clear_console.1.gz", - "size": 0, - "sha1": null, - "md5": "0c912132bdbce02861669392deb3f84c", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man1/rbash.1.gz", - "size": 0, - "sha1": null, - "md5": "6ad61b838c1370d3bed5d4410644f34a", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/man/man7/bash-builtins.7.gz", - "size": 0, - "sha1": null, - "md5": "b2fb88f251700c29d638d9202e89a693", - "sha256": null, - "sha512": null - }, - { - "path": "/usr/share/menu/bash", - "size": 0, - "sha1": null, - "md5": "0c05a14279f95fdb4618a4ccaa469681", - "sha256": null, - "sha512": null - } - ], - "extra_data": { - "multi_arch": "foreign" + { + "path": "ubuntu-var-lib-dpkg/expected.json", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] }, - "dependencies": [], - "purl": "pkg:deb/ubuntu/bash@5.0-6ubuntu1?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - }, - { - "type": "deb", - "namespace": "ubuntu", - "name": "tar", - "version": "1.30+dfsg-7", - "qualifiers": { - "arch": "amd64" + { + "path": "ubuntu-var-lib-dpkg/var", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] }, - "subpath": null, - "primary_language": null, - "description": "GNU version of the tar archiving utility\n Tar is a program for packaging a set of files as a single archive in tar\n format. The function it performs is conceptually similar to cpio, and to\n things like PKZIP in the DOS world. It is heavily used by the Debian package\n management system, and is useful for performing system backups and exchanging\n sets of files with others.", - "release_date": null, - "parties": [ - { - "type": null, - "role": "maintainer", - "name": "Ubuntu Developers ", - "email": null, - "url": null - } - ], - "keywords": [ - "utils" - ], - "homepage_url": "https://www.gnu.org/software/tar/", - "download_url": null, - "size": "880", - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [], - "extra_data": { - "multi_arch": "foreign" + { + "path": "ubuntu-var-lib-dpkg/var/lib", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/info", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/info/base-files.list", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "base-files", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/.", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/bin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/boot", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/dev", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/debian_version", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/default", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/default/motd-news", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/dpkg", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/dpkg/origins", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/dpkg/origins/debian", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/dpkg/origins/ubuntu", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/host.conf", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/issue", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/issue.net", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/legal", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/lsb-release", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/profile.d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/profile.d/01-locale-fix.sh", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/skel", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/update-motd.d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/update-motd.d/00-header", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/update-motd.d/10-help-text", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/update-motd.d/50-motd-news", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/home", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/lib", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/lib/systemd", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/lib/systemd/system", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/lib/systemd/system/motd-news.service", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/lib/systemd/system/motd-news.timer", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/proc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/root", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/run", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/sbin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/sys", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/tmp", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/bin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/bin/locale-check", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/games", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/include", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/lib", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/lib/os-release", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/sbin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/dot.bashrc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/dot.profile", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/dot.profile.md5sums", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/info.dir", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/motd", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/networks", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/profile", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/profile.md5sums", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/base-files/staff-group-for-usr-local", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/Apache-2.0", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/Artistic", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/BSD", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/CC0-1.0", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GFDL-1.2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GFDL-1.3", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GPL-1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GPL-2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GPL-3", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/LGPL-2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/LGPL-2.1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/LGPL-3", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/MPL-1.1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/MPL-2.0", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/dict", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files/README", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files/README.FHS", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files/changelog.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files/copyright", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/info", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian/overrides", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian/overrides/base-files", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/misc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/src", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/backups", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/cache", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/lib", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/lib/dpkg", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/lib/misc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/local", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/lock", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/log", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/run", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/spool", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/var/tmp", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/os-release", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GFDL", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/GPL", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/common-licenses/LGPL", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/base-files/FAQ", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_files_list", + "purl": "pkg:deb/base-files" + } + ], + "for_packages": [ + "pkg:deb/base-files@11ubuntu5?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/info/base-passwd.md5sums", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "base-passwd", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "usr/sbin/update-passwd", + "size": 0, + "sha1": null, + "md5": "151c5933546d90b0c6de9ba305d62f0e", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/base-passwd/group.master", + "size": 0, + "sha1": null, + "md5": "eee0dc6a097ceaab6fd938092bc4b86c", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/base-passwd/passwd.master", + "size": 0, + "sha1": null, + "md5": "47f32e500f784c3a1793aa2aa6fc5c31", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc-base/users-and-groups", + "size": 0, + "sha1": null, + "md5": "cdac90d3d3ef8d60e4bc0eb73efa68d7", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/README", + "size": 0, + "sha1": null, + "md5": "504775da5bdbb321fcb9f47562a45b57", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/changelog.gz", + "size": 0, + "sha1": null, + "md5": "1c6403ff29b43b43a67bbc75bd9576b3", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/copyright", + "size": 0, + "sha1": null, + "md5": "8eb6cd60f247ab06801038c6daf03f05", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/users-and-groups.html", + "size": 0, + "sha1": null, + "md5": "4bfe6b64d2007e5cf366a124bacb55b1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/base-passwd/users-and-groups.txt.gz", + "size": 0, + "sha1": null, + "md5": "d8e20ac4dd13bb84d0fdfd203aa9b1dc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/lintian/overrides/base-passwd", + "size": 0, + "sha1": null, + "md5": "8dc658a3a1b2fe714b45d245439bca24", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/de/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "1a3f08c04ae471580efcde9ea0936369", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/es/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "5ccedf3c81ac83de429e982ab2b07cdf", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/fr/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "bbf6c14f5296de0a6752d5972137d28f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/ja/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "084c4f1c22b6d3fbf086fa8fce013dff", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "b4b1ebf4b0260cb3a4d19e5b733e4479", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/pl/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "011317bc9fdf4d1be3fa6a6b6851fcd2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/ru/man8/update-passwd.8.gz", + "size": 0, + "sha1": null, + "md5": "977fb42cbcfa775d302b5ca4955c328c", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/base-passwd" + } + ], + "for_packages": [ + "pkg:deb/base-passwd@3.5.47?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/info/bash.list", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "bash", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/.", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/bin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/bin/bash", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/bash.bashrc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/skel", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/skel/.bash_logout", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/skel/.bashrc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/etc/skel/.profile", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/bin", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/bin/bashbug", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/bin/clear_console", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/COMPAT.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/INTRO.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/NEWS.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/POSIX.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/RBASH", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/README.Debian.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/README.abs-guide", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/README.commands.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/README.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/changelog.Debian.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/copyright", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/doc/bash/inputrc.arrows", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/info", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian/overrides", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/lintian/overrides/bash", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man1", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man1/bash.1.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man1/bashbug.1.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man1/clear_console.1.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man1/rbash.1.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man7", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/man/man7/bash-builtins.7.gz", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/menu", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/usr/share/menu/bash", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "", + "size": 0, + "sha1": null, + "md5": "/bin/rbash", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_files_list", + "purl": "pkg:deb/bash" + } + ], + "for_packages": [ + "pkg:deb/bash@5.0-6ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/info/bash.md5sums", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "bash", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "bin/bash", + "size": 0, + "sha1": null, + "md5": "77506afebd3b7e19e937a678a185b62e", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/bin/bashbug", + "size": 0, + "sha1": null, + "md5": "1c77d2031971b4e4c512ac952102cd85", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/bin/clear_console", + "size": 0, + "sha1": null, + "md5": "ca6d248a913ad0eb1d7301a2b6f8147b", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/COMPAT.gz", + "size": 0, + "sha1": null, + "md5": "f55e3a16959b0bb8915cb5f219521c80", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/INTRO.gz", + "size": 0, + "sha1": null, + "md5": "ab78b78be766692463cb112b88d5a74f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/NEWS.gz", + "size": 0, + "sha1": null, + "md5": "ea9dd4d5a6822115b9134609ab6c1cfd", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/POSIX.gz", + "size": 0, + "sha1": null, + "md5": "f3bbcb9d46d417ff8291421f567fca19", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/RBASH", + "size": 0, + "sha1": null, + "md5": "172188e3a6fc5409d4f113485cc6d79f", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.Debian.gz", + "size": 0, + "sha1": null, + "md5": "6bd7de8b98911613a536e83867e9b490", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.abs-guide", + "size": 0, + "sha1": null, + "md5": "5dac7b9b6332d9845e315cf8fd50ea89", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.commands.gz", + "size": 0, + "sha1": null, + "md5": "007dea9b8141f038c602b23f78509e34", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/README.gz", + "size": 0, + "sha1": null, + "md5": "4b69f2196038772f358bf6cf4f3a2d2d", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/changelog.Debian.gz", + "size": 0, + "sha1": null, + "md5": "481042f46ec4ec8ae86901df48efa598", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/copyright", + "size": 0, + "sha1": null, + "md5": "9632d707e9eca8b3ba2b1a98c1c3fdce", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/doc/bash/inputrc.arrows", + "size": 0, + "sha1": null, + "md5": "244319c9dd88c980910aacd76477b8d9", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/lintian/overrides/bash", + "size": 0, + "sha1": null, + "md5": "4574de6676d74019761f409168aa8e01", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/bash.1.gz", + "size": 0, + "sha1": null, + "md5": "b3da2a5522496f6ca42d5c00a4e65d74", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/bashbug.1.gz", + "size": 0, + "sha1": null, + "md5": "ab8320c478c9d17caaa4d86e113cf0a2", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/clear_console.1.gz", + "size": 0, + "sha1": null, + "md5": "0c912132bdbce02861669392deb3f84c", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man1/rbash.1.gz", + "size": 0, + "sha1": null, + "md5": "6ad61b838c1370d3bed5d4410644f34a", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/man/man7/bash-builtins.7.gz", + "size": 0, + "sha1": null, + "md5": "b2fb88f251700c29d638d9202e89a693", + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "usr/share/menu/bash", + "size": 0, + "sha1": null, + "md5": "0c05a14279f95fdb4618a4ccaa469681", + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_md5sums", + "purl": "pkg:deb/bash" + } + ], + "for_packages": [ + "pkg:deb/bash@5.0-6ubuntu1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] }, - "dependencies": [], - "purl": "pkg:deb/ubuntu/tar@1.30%2Bdfsg-7?arch=amd64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } -] \ No newline at end of file + { + "path": "ubuntu-var-lib-dpkg/var/lib/dpkg/status", + "type": "file", + "package_data": [ + { + "type": "deb", + "namespace": null, + "name": "base-files", + "version": "11ubuntu5", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "Debian base system miscellaneous files\n This package contains the basic filesystem hierarchy of a Debian system, and\n several important miscellaneous files, such as /etc/debian_version,\n /etc/host.conf, /etc/issue, /etc/motd, /etc/profile, and others,\n and the text of several common licenses in use on Debian systems.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "admin" + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "multi_arch": "foreign" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/base-files@11ubuntu5?architecture=amd64" + }, + { + "type": "deb", + "namespace": null, + "name": "base-passwd", + "version": "3.5.47", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "Debian base system master password and group files\n These are the canonical master copies of the user database files\n (/etc/passwd and /etc/group), containing the Debian-allocated user and\n group IDs. The update-passwd tool is provided to keep the system databases\n synchronized with these master files.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Colin Watson ", + "email": null, + "url": null + } + ], + "keywords": [ + "admin" + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "multi_arch": "foreign" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/base-passwd@3.5.47?architecture=amd64" + }, + { + "type": "deb", + "namespace": null, + "name": "bash", + "version": "5.0-6ubuntu1", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "GNU Bourne Again SHell\n Bash is an sh-compatible command language interpreter that executes\n commands read from the standard input or from a file. Bash also\n incorporates useful features from the Korn and C shells (ksh and csh).\n .\n Bash is ultimately intended to be a conformant implementation of the\n IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).\n .\n The Programmable Completion Code, by Ian Macdonald, is now found in\n the bash-completion package.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "shells" + ], + "homepage_url": "http://tiswww.case.edu/php/chet/bash/bashtop.html", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "multi_arch": "foreign" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/bash@5.0-6ubuntu1?architecture=amd64" + }, + { + "type": "deb", + "namespace": null, + "name": "tar", + "version": "1.30+dfsg-7", + "qualifiers": { + "architecture": "amd64" + }, + "subpath": null, + "primary_language": null, + "description": "GNU version of the tar archiving utility\n Tar is a program for packaging a set of files as a single archive in tar\n format. The function it performs is conceptually similar to cpio, and to\n things like PKZIP in the DOS world. It is heavily used by the Debian package\n management system, and is useful for performing system backups and exchanging\n sets of files with others.", + "release_date": null, + "parties": [ + { + "type": null, + "role": "maintainer", + "name": "Ubuntu Developers ", + "email": null, + "url": null + } + ], + "keywords": [ + "utils" + ], + "homepage_url": "https://www.gnu.org/software/tar/", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "multi_arch": "foreign" + }, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "debian_installed_status_db", + "purl": "pkg:deb/tar@1.30%2Bdfsg-7?architecture=amd64" + } + ], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/test_debian.py b/tests/packagedcode/test_debian.py index c11384f4c35..75f9f20cdfa 100644 --- a/tests/packagedcode/test_debian.py +++ b/tests/packagedcode/test_debian.py @@ -13,34 +13,21 @@ from commoncode.system import on_windows from packagedcode import debian -from packagedcode import models from packages_test_utils import PackageTester -from packages_test_utils import check_result_equals_expected_json +from scancode.cli_test_utils import check_json_scan +from scancode.cli_test_utils import run_scan_click from scancode_config import REGEN_TEST_FIXTURES - @skipIf(on_windows, 'These tests contain files that are not legit on Windows.') class TestDebianPackageGetInstalledPackages(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_basic_rootfs(self): - test_rootfs = self.extract_test_tar('debian/basic-rootfs.tar.gz') - result = [package.to_dict(_detailed=True) - for package in debian.get_installed_packages(test_rootfs)] - expected = self.get_test_loc('debian/basic-rootfs-expected.json') - check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) - - def test_basic_rootfs_with_licenses_and_copyrights(self): - test_rootfs = self.extract_test_tar('debian/basic-rootfs.tar.gz') - result = [package.to_dict(_detailed=True) - for package in debian.get_installed_packages(test_rootfs, detect_licenses=True)] - expected = self.get_test_loc('debian/basic-rootfs-with-licenses-expected.json') - check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) - - def test_get_installed_packages_should_not_fail_on_rootfs_without_installed_debian_packages(self): - test_rootfs = self.get_temp_dir() - result = list(debian.get_installed_packages(test_rootfs)) - assert result == [] + test_dir = self.extract_test_tar('debian/basic-rootfs.tar.gz') + expected_file = self.get_test_loc('debian/basic-rootfs-expected.json') + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_dir, '--json-pp', result_file]) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) class TestDebian(PackageTester): @@ -48,13 +35,13 @@ class TestDebian(PackageTester): def test_parse_status_file_not_a_status_file(self): test_file = self.get_test_loc('debian/not-a-status-file') - test_packages = list(debian.parse_status_file(test_file)) + test_packages = list(debian.DebianInstalledStatusDatabaseHandler.parse(test_file)) assert test_packages == [] def test_parse_status_file_non_existing_file(self): test_file = os.path.join(self.get_test_loc('debian'), 'foobarbaz') try: - list(debian.parse_status_file(test_file)) + list(debian.DebianInstalledStatusDatabaseHandler.parse(test_file)) self.fail('FileNotFoundError not raised') except FileNotFoundError: pass @@ -63,133 +50,83 @@ def test_parse_status_file_basic(self): test_file = self.get_test_loc('debian/basic/status') expected_loc = self.get_test_loc('debian/basic/status.expected') # specify ubuntu distro as this was the source of the test `status` file - packages = list(debian.parse_status_file(test_file, distro='ubuntu')) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = list(debian.DebianInstalledStatusDatabaseHandler.parse(test_file)) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_status_file_perl_error(self): test_file = self.get_test_loc('debian/mini-status/status') expected_loc = self.get_test_loc('debian/mini-status/status.expected') - packages = list(debian.parse_status_file(test_file, distro='debian')) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = list(debian.DebianInstalledStatusDatabaseHandler.parse(test_file)) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) @skipIf(on_windows, 'File names cannot contain colons on Windows') def test_parse_end_to_end(self): test_dir = self.extract_test_tar('debian/end-to-end.tgz') - test_info_dir = os.path.join(test_dir, 'end-to-end') - test_file = os.path.join(test_info_dir, 'status') - - packages = list(debian.parse_status_file(test_file, distro='ubuntu')) - assert len(packages) == 1 - - test_package = packages[0] - - expected = [ - models.PackageFile('/lib/x86_64-linux-gnu/libncurses.so.5.9', md5='23c8a935fa4fc7290d55cc5df3ef56b1'), - models.PackageFile('/usr/lib/x86_64-linux-gnu/libform.so.5.9', md5='98b70f283324e89db5787a018a54adf4'), - models.PackageFile('/usr/lib/x86_64-linux-gnu/libmenu.so.5.9', md5='e3a0f5154928da2da234920343ac14b2'), - models.PackageFile('/usr/lib/x86_64-linux-gnu/libpanel.so.5.9', md5='a927e7d76753bb85f5a784b653d337d2') - ] - - resources = test_package.get_list_of_installed_files(test_info_dir) - - assert len(resources) == 4 - assert resources == expected + expected_file = self.get_test_loc('debian/end-to-end.tgz.expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_dir, '--json-pp', result_file]) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) def test_get_installed_packages_ubuntu_with_missing_md5sums(self): - test_root_dir = self.get_test_loc('debian/ubuntu-var-lib-dpkg/') - - packages = debian.get_installed_packages(root_dir=test_root_dir, distro='ubuntu', detect_licenses=False) - result = [p.to_dict(_detailed=True) for p in packages] - expected = self.get_test_loc('debian/ubuntu-var-lib-dpkg/expected.json') - check_result_equals_expected_json(result, expected, regen=REGEN_TEST_FIXTURES) - + test_dir = self.get_test_loc('debian/ubuntu-var-lib-dpkg/') + expected_file = self.get_test_loc('debian/ubuntu-var-lib-dpkg/expected.json') + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_dir, '--json-pp', result_file]) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) class TestDebianGetListOfInstalledFiles(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_missing_md5sum_file(self): - test_info_dir = self.get_test_loc('debian/missing-md5sum-file') - - test_pkg = debian.DebianPackage( - name='libatk-adaptor', - qualifiers={'arch':'amd64'} + test_file = self.get_test_loc('debian/missing-md5sum-file/foobar.md5sums') + results = debian.parse_debian_files_list( + location=test_file, + datasource_id=debian.DebianInstalledMd5sumFilelistHandler.datasource_id, + package_type=debian.DebianInstalledMd5sumFilelistHandler.default_package_type, ) - test_pkg.set_multi_arch('same') - assert test_pkg.get_list_of_installed_files(test_info_dir) == [] + assert list(results) == [] @skipIf(on_windows, 'File names cannot contain colons on Windows') def test_multi_arch_is_same(self): test_dir = self.extract_test_tar('debian/same-multi-arch.tgz') - test_info_dir = os.path.join(test_dir, 'same-multi-arch') + test_file = os.path.join(test_dir, 'same-multi-arch/libatk-adaptor:amd64.md5sums') - test_pkg = debian.DebianPackage( - name='libatk-adaptor', - qualifiers={'arch':'amd64'} + results = debian.parse_debian_files_list( + location=test_file, + datasource_id=debian.DebianInstalledMd5sumFilelistHandler.datasource_id, + package_type=debian.DebianInstalledMd5sumFilelistHandler.default_package_type, ) - test_pkg.set_multi_arch('same') - - expected = [ - models.PackageFile('/usr/lib/gnome-settings-daemon-3.0/gtk-modules/at-spi2-atk.desktop', md5='34900bd11562f427776ed2c05ba6002d'), - models.PackageFile('/usr/lib/unity-settings-daemon-1.0/gtk-modules/at-spi2-atk.desktop', md5='34900bd11562f427776ed2c05ba6002d'), - models.PackageFile('/usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libatk-bridge.so', md5='6ddbc10b64afe708945c3b1497714aaa'), - models.PackageFile('/usr/share/doc/libatk-adaptor/NEWS.gz', md5='3a24add33624132b6b3b4c2ed08a4394'), - models.PackageFile('/usr/share/doc/libatk-adaptor/README', md5='452c2e9db46c9ac92a10e700d116b120'), - models.PackageFile('/usr/share/doc/libatk-adaptor/copyright', md5='971e4b2093741db8c51d263cd5c3ee48'), - ] - results = test_pkg.get_list_of_installed_files(test_info_dir) + expected_loc = self.get_test_loc('debian/libatk-adaptor-amd64.md5sums.expected.json', must_exist=False) + self.check_packages_data(results, expected_loc, must_exist=False, regen=REGEN_TEST_FIXTURES) - assert len(results) == 6 - assert results == expected + def test_parse_debian_files_list_no_arch(self): + test_file = self.get_test_loc('debian/files-md5sums/mokutil.md5sums') + results = debian.parse_debian_files_list( + location=test_file, + datasource_id=debian.DebianInstalledMd5sumFilelistHandler.datasource_id, + package_type=debian.DebianInstalledMd5sumFilelistHandler.default_package_type, + ) - def test_multi_arch_is_foreign(self): - test_info_dir = self.get_test_loc('debian/foreign-multi-arch') + expected_loc = self.get_test_loc('debian/files-md5sums/mokutil.md5sums.expected.json', must_exist=False) + self.check_packages_data(results, expected_loc, must_exist=False, regen=REGEN_TEST_FIXTURES) - test_pkg = debian.DebianPackage( - name='fonts-sil-abyssinica', - qualifiers={'arch':'amd64'} - ) - test_pkg.set_multi_arch('foreign') - - expected = [ - models.PackageFile('/usr/share/bug/fonts-sil-abyssinica/presubj', md5='7faf213b3c06e818b9976cc2ae5af51a'), - models.PackageFile('/usr/share/bug/fonts-sil-abyssinica/script', md5='672370efca8bffa183e2828907e0365d'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/OFL-FAQ.txt.gz', md5='ea72ae1d2ba5471ef54b132c79b1a03b'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/README.Debian', md5='f497d6bfc7ca4d423d703fabb7ff2e4c'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/changelog.Debian.gz', md5='7f81bc6ed7506b95af01b5eef76662bb'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/copyright', md5='13d9a840b6db71f7060670be0aafa953'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILGraphiteFontFeatures.odt', md5='0e4a5ad6839067740e81a3e1244b0b16'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILGraphiteFontFeatures.pdf.gz', md5='8fee9c92ecd425c71217418b8370c5ae'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILOpenTypeFontFeatures.pdf.gz', md5='2cc8cbe21730258dd03a465e045066cc'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILTypeSample.pdf.gz', md5='40948ce7d8e4b1ba1c7043ec8926edf9'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/AbyssinicaSILTypeTunerGuide.pdf.gz', md5='36ca1d62ca7365216e8bda952d2461e6'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/DOCUMENTATION.txt', md5='491295c116dbcb74bcad2d78a56aedbe'), - models.PackageFile('/usr/share/doc/fonts-sil-abyssinica/documentation/SILEthiopicPrivateUseAreaBlock.pdf.gz', md5='bea5aeeb76a15c2c1b8189d1b2437b31'), - models.PackageFile('/usr/share/fonts/truetype/abyssinica/AbyssinicaSIL-R.ttf', md5='9e3d4310af3892a739ba7b1189c44dca'), - ] - - results = test_pkg.get_list_of_installed_files(test_info_dir) - - assert len(results) == 14 - assert results == expected - - def test_multi_arch_is_missing(self): - test_info_dir = self.get_test_loc('debian/missing-multi-arch') - - test_pkg = debian.DebianPackage( - name='mokutil', - qualifiers={'arch':'amd64'} + @skipIf(on_windows, 'File names cannot contain colons on Windows') + def test_parse_debian_files_list_with_arch(self): + test_file = self.get_test_loc('debian/files-md5sums/mokutil.md5sums', copy=True) + from commoncode import fileutils + from pathlib import Path + src = Path(test_file) + test_dir = src.parent + test_file = str(test_dir / "mockutil:amd64.md5sum") + fileutils.copyfile(str(src), test_file) + + results = debian.parse_debian_files_list( + location=test_file, + datasource_id=debian.DebianInstalledMd5sumFilelistHandler.datasource_id, + package_type=debian.DebianInstalledMd5sumFilelistHandler.default_package_type, ) - expected = [ - models.PackageFile('/usr/bin/mokutil', md5='7a1a2629613d260e43dabc793bebdf19'), - models.PackageFile('/usr/share/bash-completion/completions/mokutil', md5='9086049384eaf0360dca4371ca50acbf'), - models.PackageFile('/usr/share/doc/mokutil/changelog.Debian.gz', md5='b3f4bb874bd61e4609823993857b9c17'), - models.PackageFile('/usr/share/doc/mokutil/copyright', md5='24dd593b630976a785b4c5ed097bbd96'), - models.PackageFile('/usr/share/man/man1/mokutil.1.gz', md5='b608675058a943d834129b6972b8509a'), - ] - results = test_pkg.get_list_of_installed_files(test_info_dir) - - assert len(results) == 5 - assert results == expected + expected_loc = self.get_test_loc('debian/files-md5sums/mokutil-amd64.md5sums.expected.json', must_exist=False) + self.check_packages_data(results, expected_loc, must_exist=False, regen=REGEN_TEST_FIXTURES) From 068b86d07add704ad3ac96c59da607adafbfbcec Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 19:43:10 +0200 Subject: [PATCH 18/36] Adopt new handler design for FreeBSD We now have this data file handler: * CompactManifestHandler And we assemble it in a Package correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/freebsd.py | 148 ++++++++---------- .../freebsd/basic/+COMPACT_MANIFEST.expected | 7 +- .../freebsd/basic2/+COMPACT_MANIFEST.expected | 7 +- .../dual_license/+COMPACT_MANIFEST.expected | 7 +- .../dual_license2/+COMPACT_MANIFEST.expected | 7 +- .../multi_license/+COMPACT_MANIFEST.expected | 7 +- .../no_licenses/+COMPACT_MANIFEST.expected | 7 +- tests/packagedcode/test_freebsd.py | 28 ++-- 8 files changed, 102 insertions(+), 116 deletions(-) diff --git a/src/packagedcode/freebsd.py b/src/packagedcode/freebsd.py index 69b69e83d36..814c6e5fce9 100644 --- a/src/packagedcode/freebsd.py +++ b/src/packagedcode/freebsd.py @@ -10,11 +10,8 @@ import io import logging -import attr import saneyaml -from commoncode import filetype -from commoncode import fileutils from packagedcode import models from packagedcode.utils import combine_expressions @@ -32,35 +29,20 @@ logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) logger.setLevel(logging.DEBUG) +# see also https://github.com/freebsd/pkg#the-metadata +# TODO: use the libucl Python binding +# TODO: support +MANIFETS and its file references -@attr.s() -class FreeBSDPackageData(models.PackageData): - file_patterns = ('+COMPACT_MANIFEST',) - default_type = 'freebsd' - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) - - -@attr.s() -class CompactManifest(FreeBSDPackageData, models.PackageDataFile): - - file_patterns = ('+COMPACT_MANIFEST',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == '+compact_manifest') +class CompactManifestHandler(models.DatafileHandler): + datasource_id = 'freebsd_compact_manifest' + path_patterns = ('*/+COMPACT_MANIFEST',) + default_package_type = 'freebsd' + description = 'FreeBSD compact package manifest' + documentation_url = 'https://www.freebsd.org/cgi/man.cgi?pkg-create(8)#MANIFEST_FILE_DETAILS' @classmethod - def recognize(cls, location): + def parse(cls, location): """ Yield one or more Package manifest objects given a file ``location`` pointing to a package archive, manifest or similar. @@ -68,17 +50,16 @@ def recognize(cls, location): with io.open(location, encoding='utf-8') as loc: freebsd_manifest = saneyaml.load(loc) - # construct the package - package = cls() + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + qualifiers=dict( + arch=freebsd_manifest.get('arch'), + origin=freebsd_manifest.get('origin'), + ) + ) - # add freebsd-specific package 'qualifiers' - qualifiers = dict([ - ('arch', freebsd_manifest.get('arch')), - ('origin', freebsd_manifest.get('origin')), - ]) - package.qualifiers = qualifiers - - # mapping of top level package.json items to the Package object field name + # mapping of top level manifest items to the PackageData object field name plain_fields = [ ('name', 'name'), ('version', 'version'), @@ -93,7 +74,7 @@ def recognize(cls, location): if isinstance(value, str): value = value.strip() if value: - setattr(package, target, value) + setattr(package_data, target, value) # mapping of top level +COMPACT_MANIFEST items to a function accepting as # arguments the package.json element value and returning an iterable of key, @@ -108,62 +89,57 @@ def recognize(cls, location): logger.debug('parse: %(source)r, %(func)r' % locals()) value = freebsd_manifest.get(source) or None if value: - func(value, package) + func(value, package_data) # license_mapper needs multiple fields - license_mapper(freebsd_manifest, package) + license_mapper(freebsd_manifest, package_data) - yield package + if package_data.declared_license: + package_data.license_expression = cls.compute_normalized_license(package_data) + yield package_data -@attr.s() -class FreebsdPackage(FreeBSDPackageData, models.Package): - """ - A Freebsd Package that is created out of one/multiple Freebsd package - manifests and package-like data, with it's files. - """ - - @property - def manifests(self): - return [ - CompactManifest - ] + @classmethod + def compute_normalized_license(cls, package): + """ + Return a normalized license expression string or None detected from a ``package`` Package + declared license items or an ordered dict. + """ + declared_license = package.declared_license + if not declared_license: + return + if not isinstance(declared_license, dict): + return models.compute_normalized_license(declared_license=declared_license) -def compute_normalized_license(declared_license): - """ - Return a normalized license expression string detected from a list of - declared license items or an ordered dict. - """ - if not declared_license: - return + licenses = declared_license.get('licenses') + if not licenses: + return - licenses = declared_license.get('licenses') - if not licenses: - return - - license_logic = declared_license.get('licenselogic') - relation = 'AND' - if license_logic: - if license_logic == 'or' or license_logic == 'dual': - relation = 'OR' + license_logic = declared_license.get('licenselogic') + # the default in FreebSD expressions is AND + relation = 'AND' + if license_logic: + if license_logic == 'or' or license_logic == 'dual': + relation = 'OR' - detected_licenses = [] - for declared in licenses: - detected_license = models.compute_normalized_license(declared) - if detected_license: - detected_licenses.append(detected_license) + detected_licenses = [] + for lic in licenses: + detected = models.compute_normalized_license(declared_license=lic) + if detected: + detected_licenses.append(detected) - if detected_licenses: - return combine_expressions(detected_licenses, relation) + if detected_licenses: + return combine_expressions(expressions=detected_licenses, relation=relation) -def license_mapper(package_data, package): +def license_mapper(freebsd_manifest, package): """ - Update package licensing and return package. Licensing structure for FreeBSD - packages is a list of (non-scancode) license keys and a 'licenselogic' field. + Update ``package`` Package declared licensing using ``freebsd_manifest`` and + return package. Licensing structure for FreeBSD packages is a list of + FreeBSD own license keys and a 'licenselogic' field. """ - license_logic, licenses = package_data.get('licenselogic'), package_data.get('licenses') + licenses = freebsd_manifest.get('licenses') if not licenses: return @@ -171,11 +147,13 @@ def license_mapper(package_data, package): declared_license = {} lics = [l.strip() for l in licenses if l and l.strip()] declared_license['licenses'] = lics + + license_logic = freebsd_manifest.get('licenselogic') if license_logic: declared_license['licenselogic'] = license_logic package.declared_license = declared_license - return package + return def maintainer_mapper(maintainer, package): @@ -192,8 +170,10 @@ def origin_mapper(origin, package): Update package code_view_url using FreeBSD origin information and return package. """ # the 'origin' field allows us to craft a code_view_url + # TODO: the origin may need to be the namespace?? package.qualifiers['origin'] = origin - package.code_view_url = 'https://svnweb.freebsd.org/ports/head/{}'.format(origin) + package.code_view_url = f'https://svnweb.freebsd.org/ports/head/{origin}' + return package def arch_mapper(arch, package): @@ -203,5 +183,5 @@ def arch_mapper(arch, package): # the 'arch' field allows us to craft a binary download_url # FIXME: due to the rolling-release nature of binary ports, some download URLs # will lead to 404 errors if a newer release of a particular port is availible - package.download_url = 'https://pkg.freebsd.org/{}/latest/All/{}-{}.txz'.format(arch, package.name, package.version) + package.download_url = f'https://pkg.freebsd.org/{arch}/latest/All/{package.name}-{package.version}.txz' return package diff --git a/tests/packagedcode/data/freebsd/basic/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/basic/+COMPACT_MANIFEST.expected index 2f7dd9f66fe..052ac70f8ec 100644 --- a/tests/packagedcode/data/freebsd/basic/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/basic/+COMPACT_MANIFEST.expected @@ -43,13 +43,14 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/freebsd/basic2/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/basic2/+COMPACT_MANIFEST.expected index f16e6905719..bdcc90e6877 100644 --- a/tests/packagedcode/data/freebsd/basic2/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/basic2/+COMPACT_MANIFEST.expected @@ -43,13 +43,14 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/0d1n@2.3?arch=freebsd:10:x86:64&origin=security/0d1n", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/0d1n@2.3?arch=freebsd:10:x86:64&origin=security/0d1n" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/freebsd/dual_license/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/dual_license/+COMPACT_MANIFEST.expected index 52107c29f0a..f3e76d3d14a 100644 --- a/tests/packagedcode/data/freebsd/dual_license/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/dual_license/+COMPACT_MANIFEST.expected @@ -45,13 +45,14 @@ "licenselogic": "or" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/rubygem-facets@3.1.0?arch=freebsd:10:%2A&origin=devel/rubygem-facets", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/rubygem-facets@3.1.0?arch=freebsd:10:%2A&origin=devel/rubygem-facets" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/freebsd/dual_license2/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/dual_license2/+COMPACT_MANIFEST.expected index f14a29fa9ac..cf2c782884e 100644 --- a/tests/packagedcode/data/freebsd/dual_license2/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/dual_license2/+COMPACT_MANIFEST.expected @@ -46,13 +46,14 @@ "licenselogic": "or" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/rubygem-ttfunk@1.5.1?arch=freebsd:10:%2A&origin=print/rubygem-ttfunk", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/rubygem-ttfunk@1.5.1?arch=freebsd:10:%2A&origin=print/rubygem-ttfunk" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/freebsd/multi_license/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/multi_license/+COMPACT_MANIFEST.expected index e4ffe771e09..45582af731d 100644 --- a/tests/packagedcode/data/freebsd/multi_license/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/multi_license/+COMPACT_MANIFEST.expected @@ -45,13 +45,14 @@ "licenselogic": "and" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/py27-idna@2.6?arch=freebsd:10:%2A&origin=dns/py-idna", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/py27-idna@2.6?arch=freebsd:10:%2A&origin=dns/py-idna" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/freebsd/no_licenses/+COMPACT_MANIFEST.expected b/tests/packagedcode/data/freebsd/no_licenses/+COMPACT_MANIFEST.expected index 9e88282ec5a..d0272ac75ab 100644 --- a/tests/packagedcode/data/freebsd/no_licenses/+COMPACT_MANIFEST.expected +++ b/tests/packagedcode/data/freebsd/no_licenses/+COMPACT_MANIFEST.expected @@ -38,13 +38,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_freebsd.py b/tests/packagedcode/test_freebsd.py index 203dbd0239e..70280b89376 100644 --- a/tests/packagedcode/test_freebsd.py +++ b/tests/packagedcode/test_freebsd.py @@ -20,47 +20,47 @@ class TestFreeBSD(PackageTester): def test_is_manifest_compact_manifest(self): test_file = self.get_test_loc('freebsd/multi_license/+COMPACT_MANIFEST') - assert freebsd.CompactManifest.is_package_data_file(test_file) + assert freebsd.CompactManifestHandler.is_datafile(test_file) def test_parse_with_multi_licenses(self): test_file = self.get_test_loc('freebsd/multi_license/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/multi_license/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_dual_licenses2(self): test_file = self.get_test_loc('freebsd/dual_license2/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/dual_license2/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_dual_licenses(self): test_file = self.get_test_loc('freebsd/dual_license/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/dual_license/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_without_licenses(self): test_file = self.get_test_loc('freebsd/no_licenses/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/no_licenses/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_basic2(self): test_file = self.get_test_loc('freebsd/basic2/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/basic2/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_basic(self): test_file = self.get_test_loc('freebsd/basic/+COMPACT_MANIFEST') expected_loc = self.get_test_loc('freebsd/basic/+COMPACT_MANIFEST.expected') - package = freebsd.CompactManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = freebsd.CompactManifestHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_not_yaml(self): test_file = self.get_test_loc('freebsd/not_yaml/+COMPACT_MANIFEST') try: - freebsd.CompactManifest.recognize(test_file) + freebsd.CompactManifestHandler.parse(test_file) except saneyaml.YAMLError as e: assert 'while parsing a block node' in str(e) From 78523fc12605df2746b0eb92afabbb689e06db7b Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 19:45:20 +0200 Subject: [PATCH 19/36] Adopt new handler design for Conda We now have these data file handlers: * GoModHandler * GoSumHandler * GodepsHandler (legacy) And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/go_mod.py | 162 ++++++++--------- src/packagedcode/godeps.py | 170 ++++++++++-------- src/packagedcode/golang.py | 142 ++++++--------- .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../comments/Godeps.json-expected-package | 75 ++++++++ .../{Godeps.json-full => full/Godeps.json} | 0 .../Godeps.json-expected} | 0 .../godeps/full/Godeps.json-expected-package | 165 +++++++++++++++++ .../{Godeps.json-full2 => full2/Godeps.json} | 0 .../Godeps.json-expected} | 0 .../godeps/full2/Godeps.json-expected-package | 129 +++++++++++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../medium/Godeps.json-expected-package | 48 +++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../medium2/Godeps.json-expected-package | 66 +++++++ .../{Godeps.json-mini => mini/Godeps.json} | 0 .../Godeps.json-expected} | 0 .../godeps/mini/Godeps.json-expected-package | 38 ++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../package1/Godeps.json-expected-package | 120 +++++++++++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../package2/Godeps.json-expected-package | 38 ++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../package3/Godeps.json-expected-package | 48 +++++ .../Godeps.json} | 0 .../Godeps.json-expected} | 0 .../simple/Godeps.json-expected-package | 48 +++++ .../golang/gomod/kingpin/output.expected.json | 7 +- .../opencensus-service/output.expected.json | 7 +- .../gomod/participle/output.expected.json | 7 +- .../golang/gomod/sample/output.expected.json | 7 +- .../golang/gomod/uap-go/output.expected.json | 7 +- .../gomod/user_agent/output.expected.json | 7 +- .../golang/gosum/sample1/output.expected.json | 7 +- .../golang/gosum/sample2/output.expected.json | 7 +- .../golang/gosum/sample3/output.expected.json | 7 +- .../golang/gosum/sample4/output.expected.json | 7 +- .../golang/gosum/sample5/output.expected.json | 7 +- .../golang/gosum/sample6/output.expected.json | 7 +- tests/packagedcode/test_godeps.py | 73 ++++---- tests/packagedcode/test_golang.py | 52 +++--- 47 files changed, 1112 insertions(+), 346 deletions(-) rename tests/packagedcode/data/godeps/{Godeps.json-comments => comments/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-commentsexpected.json => comments/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/comments/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-full => full/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-fullexpected.json => full/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/full/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-full2 => full2/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-full2expected.json => full2/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/full2/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-medium => medium/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-mediumexpected.json => medium/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/medium/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-medium2 => medium2/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-medium2expected.json => medium2/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/medium2/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-mini => mini/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-miniexpected.json => mini/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/mini/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-package1 => package1/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-package1expected.json => package1/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/package1/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-package2 => package2/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-package2expected.json => package2/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/package2/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-package3 => package3/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-package3expected.json => package3/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/package3/Godeps.json-expected-package rename tests/packagedcode/data/godeps/{Godeps.json-simple => simple/Godeps.json} (100%) rename tests/packagedcode/data/godeps/{expected/Godeps.json-simpleexpected.json => simple/Godeps.json-expected} (100%) create mode 100644 tests/packagedcode/data/godeps/simple/Godeps.json-expected-package diff --git a/src/packagedcode/go_mod.py b/src/packagedcode/go_mod.py index 0772505a8f3..527931c2dcc 100644 --- a/src/packagedcode/go_mod.py +++ b/src/packagedcode/go_mod.py @@ -7,23 +7,12 @@ # import io -import logging import re import attr from packageurl import PackageURL -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - @attr.s() class GoModule(object): namespace = attr.ib(default=None) @@ -45,59 +34,6 @@ def purl(self, include_version=True): ).to_string() -####################################################################################### -""" -This part handles go.mod files from Go. -See https://golang.org/ref/mod#go.mod-files for details - -For example: - -module example.com/my/thing - -go 1.12 - -require example.com/other/thing v1.0.2 -require example.com/new/thing v2.3.4 -exclude example.com/old/thing v1.2.3 -require ( - example.com/new/thing v2.3.4 - example.com/old/thing v1.2.3 -) -require ( - example.com/new/thing v2.3.4 - example.com/old/thing v1.2.3 -) - -""" - -""" -module is in the form -require github.com/davecgh/go-spew v1.1.1 -or -exclude github.com/davecgh/go-spew v1.1.1 -or -module github.com/alecthomas/participle - -For example: ->>> p = parse_module('module github.com/alecthomas/participle') ->>> assert p.group('type') == ('module') ->>> assert p.group('ns_name') == ('github.com/alecthomas/participle') - ->>> p = parse_module('require github.com/davecgh/go-spew v1.1.1') ->>> assert p.group('type') == ('require') ->>> assert p.group('ns_name') == ('github.com/davecgh/go-spew') ->>> assert p.group('version') == ('v1.1.1') - -require or exclude can be in the form -github.com/davecgh/go-spew v1.1.1 - -For example: ->>> p = parse_dep_link('github.com/davecgh/go-spew v1.1.1') ->>> assert p.group('namespace') == ('github.com/davecgh') ->>> assert p.group('name') == ('go-spew') ->>> assert p.group('version') == ('v1.1.1') -""" - # Regex expressions to parse different types of go.mod file dependency parse_module = re.compile( r'(?P[^\s]+)' @@ -128,6 +64,55 @@ def preprocess(line): def parse_gomod(location): """ Return a dictionary containing all the important go.mod file data. + + Handle go.mod files from Go. + See https://golang.org/ref/mod#go.mod-files for details + + For example: + + module example.com/my/thing + + go 1.12 + + require example.com/other/thing v1.0.2 + require example.com/new/thing v2.3.4 + exclude example.com/old/thing v1.2.3 + require ( + example.com/new/thing v2.3.4 + example.com/old/thing v1.2.3 + ) + require ( + example.com/new/thing v2.3.4 + example.com/old/thing v1.2.3 + ) + + Each module line is in the form + require github.com/davecgh/go-spew v1.1.1 + or + exclude github.com/davecgh/go-spew v1.1.1 + or + module github.com/alecthomas/participle + + For example:: + + >>> p = parse_module('module github.com/alecthomas/participle') + >>> assert p.group('type') == ('module') + >>> assert p.group('ns_name') == ('github.com/alecthomas/participle') + + >>> p = parse_module('require github.com/davecgh/go-spew v1.1.1') + >>> assert p.group('type') == ('require') + >>> assert p.group('ns_name') == ('github.com/davecgh/go-spew') + >>> assert p.group('version') == ('v1.1.1') + + A line for require or exclude can be in the form: + + github.com/davecgh/go-spew v1.1.1 + + For example:: + + >>> p = parse_dep_link('github.com/davecgh/go-spew v1.1.1') + >>> assert p.group('ns_name') == ('github.com/davecgh/go-spew') + >>> assert p.group('version') == ('v1.1.1') """ with io.open(location, encoding='utf-8', closefd=True) as data: lines = data.readlines() @@ -140,7 +125,7 @@ def parse_gomod(location): line = preprocess(line) if 'require' in line and '(' in line: - for req in lines[i+1:]: + for req in lines[i + 1:]: req = preprocess(req) if ')' in req: break @@ -157,7 +142,7 @@ def parse_gomod(location): continue if 'exclude' in line and '(' in line: - for exc in lines[i+1:]: + for exc in lines[i + 1:]: exc = preprocess(exc) if ')' in exc: break @@ -207,29 +192,6 @@ def parse_gomod(location): return gomods -####################################################################################### -""" -This part handles go.sum files from Go. -See https://blog.golang.org/using-go-modules for details - -A go.sum file contains pinned Go modules checksums of two styles: - -For example: -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= - -... where the line with /go.mod is for a check of that go.mod file -and the other line contains a dirhash for that path as documented as -https://pkg.go.dev/golang.org/x/mod/sumdb/dirhash - -Here are some example of usage of this module:: - ->>> p = get_dependency('github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=') ->>> assert p.group('ns_name') == ('github.com/BurntSushi/toml') ->>> assert p.group('version') == ('v0.3.1') ->>> assert p.group('checksum') == ('WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=') -""" - # Regex expressions to parse go.sum file dependency # dep example: github.com/BurntSushi/toml v0.3.1 h1:WXkYY.... get_dependency = re.compile( @@ -244,6 +206,28 @@ def parse_gomod(location): def parse_gosum(location): """ Return a list of GoSum from parsing the go.sum file at `location`. + + Handles go.sum file from Go. + + See https://blog.golang.org/using-go-modules for details + + A go.sum file contains pinned Go modules checksums of two styles: + + For example:: + + github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= + github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= + + ... where the line with /go.mod is for a check of that go.mod file + and the other line contains a dirhash for that path as documented as + https://pkg.go.dev/golang.org/x/mod/sumdb/dirhash + + For example:: + + >>> p = get_dependency('github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=') + >>> assert p.group('ns_name') == ('github.com/BurntSushi/toml') + >>> assert p.group('version') == ('v0.3.1') + >>> assert p.group('checksum') == ('WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=') """ with io.open(location, encoding='utf-8', closefd=True) as data: lines = data.readlines() diff --git a/src/packagedcode/godeps.py b/src/packagedcode/godeps.py index 5bc7428d88b..70589e087be 100644 --- a/src/packagedcode/godeps.py +++ b/src/packagedcode/godeps.py @@ -7,45 +7,88 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -from collections import namedtuple import io import json -import logging +from commoncode import datautils + +from packagedcode import models +import attr +from packageurl import PackageURL """ Handle Godeps-like Go package dependency data. -Note: there are other dependency tools for Go beside Godeps, yet -several use the same format. +Note: there are other dependency tools for Go beside Godeps, yet several use the +same format. Godeps (and glide, etc.) is mostly legacy today and replaced by Go +modules. """ # FIXME: update to use the latest vendor conventions. +# consider other legacy format? +# https://github.com/golang/dep/blob/master/Gopkg.lock +# https://github.com/golang/dep/blob/master/Gopkg.toml + + +class GodepsHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'godeps' + default_package_type = 'golang' + default_primary_language = 'Go' + path_patterns = ('*/Godeps.json',) + description = 'Go Godeps' + documentation_url = 'https://github.com/tools/godep' + + @classmethod + def parse(cls, location): + godeps = Godep(location) + + if godeps.import_path: + # we create a purl from the import path to parse ns/name nicely + purl = PackageURL.from_string(f'pkg:golang/{godeps.import_path}') + namespace = purl.namespace + name = purl.name + else: + namespace = None + name = None -TRACE = False - - -def logger_debug(*args): - pass - - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - - -class Dep(namedtuple('Dep', 'import_path revision comment')): + dependencies = [] + deps = godeps.dependencies or [] + for dep in deps: + dependencies.append( + models.DependentPackage( + purl=str(PackageURL.from_string(f'pkg:golang/{dep.import_path}')), + extracted_requirement=dep.revision, + scope='Deps', + is_runtime=True, + is_optional=False, + is_resolved=False, + ) + ) + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + namespace=namespace, + name=name, + primary_language=cls.default_primary_language, + dependencies=dependencies, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + super().assign_package_to_parent_tree(package, resource, codebase) + + +@attr.s +class Dep: + import_path = datautils.String() + revision = datautils.String() + comment = datautils.String() - def __new__(cls, import_path=None, revision=None, comment=None): - return super(Dep, cls).__new__(cls, import_path, revision, comment) + def to_dict(self): + return attr.asdict(self) -# map Godep names to our own attribute names +# map of Godep names to our own attribute names NAMES = { 'ImportPath': 'import_path', 'GoVersion': 'go_version', @@ -56,9 +99,10 @@ def __new__(cls, import_path=None, revision=None, comment=None): } -class Godep(object): +@attr.s +class Godep: """ - A JSON dep file with this structure: + Represent JSON dep file with this structure: type Godeps struct { ImportPath string GoVersion string // Abridged output of 'go version'. @@ -78,34 +122,30 @@ class Godep(object): Comment Rev """ + location = datautils.String() + import_path = datautils.String() + go_version = datautils.String() + packages = datautils.List(item_type=str) + dependencies = datautils.List(item_type=Dep) - def __init__(self, location=None, import_path=None, go_version=None, - packages=None, dependencies=None): - - self.location = location - self.import_path = None - self.go_version = None - self.dependencies = [] - self.packages = [] - - if location: - self.load(location) - else: - self.import_path = import_path - self.go_version = go_version - self.dependencies = dependencies or [] - self.packages = packages or [] + def __attrs_post_init__(self, *args, **kwargs): + if self.location: + self.load(self.location) def load(self, location): """ - Load self from a location string or a file-like object - containing a Godeps JSON. + Load self from a location string or a file-like object containing a + Godeps JSON. """ - if isinstance(location, str): - with io.open(location, encoding='utf-8') as godep: - data = json.load(godep) - else: - data = json.load(location) + with io.open(location, encoding='utf-8') as godep: + text = godep.read() + return self.loads(text) + + def loads(self, text): + """ + Load a Godeps JSON text. + """ + data = json.loads(text) for key, value in data.items(): name = NAMES.get(key) @@ -115,15 +155,10 @@ def load(self, location): setattr(self, name, value) return self - def loads(self, string): + def parse_deps(self, deps): """ - Load a Godeps JSON string. + Return a list of Dep from a ``deps`` list of dependency mappings. """ - from io import StringIO - self.load(StringIO(string)) - return self - - def parse_deps(self, deps): deps_list = [] for dep in deps: data = dict((NAMES[key], value) for key, value in dep.items()) @@ -131,19 +166,12 @@ def parse_deps(self, deps): return deps_list or [] def to_dict(self): - dct = {} - dct.update([ - ('import_path', self.import_path), - ('go_version', self.go_version), - ('packages', self.packages), - ('dependencies', [d._asdict() for d in self.dependencies]), - ]) - return dct - - def __repr__(self): - return ('Godep(%r)' % self.to_dict()) - - __str__ = __repr__ + return { + 'import_path': self.import_path, + 'go_version': self.go_version, + 'packages': self.packages, + 'dependencies': [d.to_dict() for d in self.dependencies], + } def parse(location): diff --git a/src/packagedcode/golang.py b/src/packagedcode/golang.py index c94caca6b11..e78477e33dc 100644 --- a/src/packagedcode/golang.py +++ b/src/packagedcode/golang.py @@ -6,12 +6,7 @@ # See https://github.com/nexB/scancode-toolkit for support or download. # See https://aboutcode.org for more information about nexB OSS projects. # -import logging -import attr - -from commoncode import fileutils -from commoncode import filetype from packagedcode import go_mod from packagedcode import models @@ -19,64 +14,47 @@ Handle Go packages including go.mod and go.sum files. """ -# TODO: -# go.mod file does not contain version number. +# FIXME: !!improve how we handle packages names vs. subpath. +# we need to have shorter names and use subpath + +# TODO: go.mod file does not contain version number. # valid download url need version number # CHECK: https://forum.golangbridge.org/t/url-to-download-package/19811 -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - -@attr.s() -class GolangPackageData(models.PackageData): - default_type = 'golang' - default_primary_language = 'Go' - default_web_baseurl = 'https://pkg.go.dev' - default_download_baseurl = None - default_api_baseurl = None - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - if self.namespace and self.name: - return '{}/{}/{}'.format(baseurl, self.namespace, self.name) - +# TODO: use the LICENSE file convention! +# TODO: support "vendor" and "workspace" layouts -@attr.s() -class GoMod(GolangPackageData, models.PackageDataFile): - file_patterns = ('go.mod',) - extensions = ('.mod',) +class BaseGoModuleHandler(models.DatafileHandler): @classmethod - def is_package_data_file(cls, location): + def assemble(cls, package_data, resource, codebase): """ - Return True if the file at ``location`` is likely a manifest of this type. + Always use go.mod first then go.sum """ - filename = fileutils.file_name(location).lower() - return filetype.is_file(location) and filename == 'go.mod' + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=('go.mod', 'go.sum',), + directory=resource.parent(codebase), + codebase=codebase, + ) + + +class GoModHandler(BaseGoModuleHandler): + datasource_id = 'go_mod' + path_patterns = ('*/go.mod',) + default_package_type = 'golang' + default_primary_language = 'Go' + description = 'Go modules file' + documentation_url = 'https://go.dev/ref/mod' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): gomods = go_mod.parse_gomod(location) - package_dependencies = [] + dependencies = [] require = gomods.require or [] for gomod in require: - package_dependencies.append( + dependencies.append( models.DependentPackage( purl=gomod.purl(include_version=True), extracted_requirement=gomod.version, @@ -89,7 +67,7 @@ def recognize(cls, location): exclude = gomods.exclude or [] for gomod in exclude: - package_dependencies.append( + dependencies.append( models.DependentPackage( purl=gomod.purl(include_version=True), extracted_requirement=gomod.version, @@ -102,40 +80,38 @@ def recognize(cls, location): name = gomods.name namespace = gomods.namespace - homepage_url = 'https://pkg.go.dev/{}/{}'.format(gomods.namespace, gomods.name) - vcs_url = 'https://{}/{}.git'.format(gomods.namespace, gomods.name) - yield cls( + homepage_url = f'https://pkg.go.dev/{gomods.namespace}/{gomods.name}' + vcs_url = f'https://{gomods.namespace}/{gomods.name}.git' + + repository_homepage_url = None + if namespace and name: + repository_homepage_url = f'https://pkg.go.dev/{namespace}/{name}' + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, namespace=namespace, vcs_url=vcs_url, homepage_url=homepage_url, - dependencies=package_dependencies + repository_homepage_url=repository_homepage_url, + dependencies=dependencies, + primary_language=cls.default_primary_language, ) -@attr.s() -class GoSum(GolangPackageData, models.PackageDataFile): - - file_patterns = ('go.sum',) - extensions = ('.sum',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - filename = fileutils.file_name(location).lower() - return filetype.is_file(location) and filename == 'go.sum' +class GoSumHandler(BaseGoModuleHandler): + datasource_id = 'go_sum' + path_patterns = ('*/go.sum',) + default_package_type = 'golang' + default_primary_language = 'Go' + description = 'Go module cheksums file' + documentation_url = 'https://go.dev/ref/mod#go-sum-files' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): gosums = go_mod.parse_gosum(location) - package_dependencies = [] for gosum in gosums: package_dependencies.append( @@ -149,19 +125,9 @@ def recognize(cls, location): ) ) - yield cls(dependencies=package_dependencies) - - -@attr.s() -class GoPackage(GolangPackageData, models.Package): - """ - A Golang Package that is created out of one/multiple go package - manifests. - """ - - @property - def manifests(self): - return [ - GoMod, - GoSum - ] + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + dependencies=package_dependencies, + primary_language=cls.default_primary_language, + ) diff --git a/tests/packagedcode/data/godeps/Godeps.json-comments b/tests/packagedcode/data/godeps/comments/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-comments rename to tests/packagedcode/data/godeps/comments/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-commentsexpected.json b/tests/packagedcode/data/godeps/comments/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-commentsexpected.json rename to tests/packagedcode/data/godeps/comments/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/comments/Godeps.json-expected-package b/tests/packagedcode/data/godeps/comments/Godeps.json-expected-package new file mode 100644 index 00000000000..97b2d153c71 --- /dev/null +++ b/tests/packagedcode/data/godeps/comments/Godeps.json-expected-package @@ -0,0 +1,75 @@ +[ + { + "type": "golang", + "namespace": "bitbucket.org/ehazlett/dialogue", + "name": "cli", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/code.google.com/p/go.crypto/ssh/terminal", + "extracted_requirement": "fe6c00a82e550c3be0c18b3ed05211c9c2ec8106", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/Sirupsen/logrus", + "extracted_requirement": "5568a01db73b24230945a9ccd6813fac482e226f", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/codegangsta/cli", + "extracted_requirement": "820deefc9031d101f085ef773425fc6ca7a5363e", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/howeyc/gopass", + "extracted_requirement": "e8c0d21f59eb7f01086a39e47e05568acc9bb736", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/bitbucket.org/ehazlett/dialogue/cli" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-full b/tests/packagedcode/data/godeps/full/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-full rename to tests/packagedcode/data/godeps/full/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-fullexpected.json b/tests/packagedcode/data/godeps/full/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-fullexpected.json rename to tests/packagedcode/data/godeps/full/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/full/Godeps.json-expected-package b/tests/packagedcode/data/godeps/full/Godeps.json-expected-package new file mode 100644 index 00000000000..d0030f97a4e --- /dev/null +++ b/tests/packagedcode/data/godeps/full/Godeps.json-expected-package @@ -0,0 +1,165 @@ +[ + { + "type": "golang", + "namespace": "github.com/cloudfoundry-incubator", + "name": "etcd-metrics-server", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/github.com/cloudfoundry-incubator/metricz", + "extracted_requirement": "d9bdb1b78384f05faa694175782055d5ba3966b5", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/gosteno", + "extracted_requirement": "5eb8c6e554f0dfc39d6468813b8ac19ec28fe74f", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/gunk/natsrunner", + "extracted_requirement": "8c166e2e973df123b29351b396bb8d356192bd81", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/gunk/runner_support", + "extracted_requirement": "8c166e2e973df123b29351b396bb8d356192bd81", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/gunk/test_server", + "extracted_requirement": "8c166e2e973df123b29351b396bb8d356192bd81", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/gunk/urljoiner", + "extracted_requirement": "8c166e2e973df123b29351b396bb8d356192bd81", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/loggregatorlib/cfcomponent/localip", + "extracted_requirement": "90e9aee1f6ae4ba750c6656c3fb529bf217b4908", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/storeadapter", + "extracted_requirement": "75297e7f1b7c70951bb78c8122bc266288870829", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/cloudfoundry/yagnats", + "extracted_requirement": "8bf15e48f3abf6db1765ff908ee678a6f347ce0a", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/coreos/go-etcd/etcd", + "extracted_requirement": "1e26d8ee84cf9b1000d2af8acfb45b2521f49be5", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/nu7hatch/gouuid", + "extracted_requirement": "179d4d0c4d8d407a32af483c2354df1d2c91e6c3", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/onsi/ginkgo", + "extracted_requirement": "462cb7e31b222093d2fd2f4f0cbbce324f6ab3be", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/onsi/gomega", + "extracted_requirement": "426c03a406ae6e4ffb9b65528d62439831d7c901", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/vito/cmdtest", + "extracted_requirement": "215c451d78ba1382cbccb2736c280c60a11b4b86", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/cloudfoundry-incubator/etcd-metrics-server" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-full2 b/tests/packagedcode/data/godeps/full2/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-full2 rename to tests/packagedcode/data/godeps/full2/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-full2expected.json b/tests/packagedcode/data/godeps/full2/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-full2expected.json rename to tests/packagedcode/data/godeps/full2/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/full2/Godeps.json-expected-package b/tests/packagedcode/data/godeps/full2/Godeps.json-expected-package new file mode 100644 index 00000000000..1a5b3c67872 --- /dev/null +++ b/tests/packagedcode/data/godeps/full2/Godeps.json-expected-package @@ -0,0 +1,129 @@ +[ + { + "type": "golang", + "namespace": "github.com/xanzy", + "name": "chef-guard", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/bitbucket.org/kardianos/osext", + "extracted_requirement": "5d3ddcf53a508cc2f7404eaebf546ef2cb5cdb6e", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/code.google.com/p/gcfg", + "extracted_requirement": "c2d3050044d05357eaf6c3547249ba57c5e235cb", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/code.google.com/p/goauth2/oauth", + "extracted_requirement": "6a3615e294b534a1c24cb5d3d7570fa8bbc30c99", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/google/go-github/github", + "extracted_requirement": "823c72494dd3822890a5c878896a788eda197b94", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/google/go-querystring/query", + "extracted_requirement": "ec0a78e0f4db229b7897be36596a8944230b857a", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/gorilla/context", + "extracted_requirement": "14f550f51af52180c2eefed15e5fd18d63c0a64a", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/gorilla/mux", + "extracted_requirement": "14cafe28513321476c73967a5a4f3454b6129c46", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/marpaia/chef-golang", + "extracted_requirement": "89f0d0cdd0068c39e1f90f5e657b7c82899fc2c8", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/marpaia/graphite-golang", + "extracted_requirement": "c5518419e353360b24b340ebd1066af7cab612c3", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/xanzy/go-pathspec", + "extracted_requirement": "1df22d11e0dfefec0469a9f2c7c4588308b9a5c0", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/xanzy/chef-guard" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-medium b/tests/packagedcode/data/godeps/medium/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-medium rename to tests/packagedcode/data/godeps/medium/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-mediumexpected.json b/tests/packagedcode/data/godeps/medium/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-mediumexpected.json rename to tests/packagedcode/data/godeps/medium/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/medium/Godeps.json-expected-package b/tests/packagedcode/data/godeps/medium/Godeps.json-expected-package new file mode 100644 index 00000000000..479aa20970e --- /dev/null +++ b/tests/packagedcode/data/godeps/medium/Godeps.json-expected-package @@ -0,0 +1,48 @@ +[ + { + "type": "golang", + "namespace": "github.com/goincremental", + "name": "dal", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/labix.org/v2/mgo", + "extracted_requirement": "gustavo@niemeyer.net-20140501184651-975yyw9ipld92pji", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/goincremental/dal" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-medium2 b/tests/packagedcode/data/godeps/medium2/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-medium2 rename to tests/packagedcode/data/godeps/medium2/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-medium2expected.json b/tests/packagedcode/data/godeps/medium2/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-medium2expected.json rename to tests/packagedcode/data/godeps/medium2/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/medium2/Godeps.json-expected-package b/tests/packagedcode/data/godeps/medium2/Godeps.json-expected-package new file mode 100644 index 00000000000..1ccb7c3f461 --- /dev/null +++ b/tests/packagedcode/data/godeps/medium2/Godeps.json-expected-package @@ -0,0 +1,66 @@ +[ + { + "type": "golang", + "namespace": "github.com/sanbornm/go-selfupdate", + "name": "selfupdate", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/bitbucket.org/kardianos/osext", + "extracted_requirement": "5d3ddcf53a508cc2f7404eaebf546ef2cb5cdb6e", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/inconshreveable/go-update", + "extracted_requirement": "3f0466666779bd2143f368a207b0641f0ed536e8", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/kr/binarydist", + "extracted_requirement": "9955b0ab8708602d411341e55fffd7e0700f86bd", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/sanbornm/go-selfupdate/selfupdate" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-mini b/tests/packagedcode/data/godeps/mini/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-mini rename to tests/packagedcode/data/godeps/mini/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-miniexpected.json b/tests/packagedcode/data/godeps/mini/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-miniexpected.json rename to tests/packagedcode/data/godeps/mini/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/mini/Godeps.json-expected-package b/tests/packagedcode/data/godeps/mini/Godeps.json-expected-package new file mode 100644 index 00000000000..01a8581137a --- /dev/null +++ b/tests/packagedcode/data/godeps/mini/Godeps.json-expected-package @@ -0,0 +1,38 @@ +[ + { + "type": "golang", + "namespace": null, + "name": "app", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/app" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-package1 b/tests/packagedcode/data/godeps/package1/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-package1 rename to tests/packagedcode/data/godeps/package1/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-package1expected.json b/tests/packagedcode/data/godeps/package1/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-package1expected.json rename to tests/packagedcode/data/godeps/package1/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/package1/Godeps.json-expected-package b/tests/packagedcode/data/godeps/package1/Godeps.json-expected-package new file mode 100644 index 00000000000..6972d899da6 --- /dev/null +++ b/tests/packagedcode/data/godeps/package1/Godeps.json-expected-package @@ -0,0 +1,120 @@ +[ + { + "type": "golang", + "namespace": "github.com/calmh", + "name": "mole", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/bitbucket.org/kardianos/osext", + "extracted_requirement": "364fb577de68fb646c4cb39cc0e09c887ee16376", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/code.google.com/p/go.crypto/ssh", + "extracted_requirement": "6478cc9340cbbe6c04511280c5007722269108e9", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/code.google.com/p/go.crypto/twofish", + "extracted_requirement": "6478cc9340cbbe6c04511280c5007722269108e9", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/code.google.com/p/go.net/proxy", + "extracted_requirement": "55437409069bb181ad562b1ad1e5f361c44aff17", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/calmh/ini", + "extracted_requirement": "1020b6d8618a7dc6031cda4a7782324eac346875", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/calmh/randomart", + "extracted_requirement": "c93aeb3ba3f3e6081cd41b1f2c46e95403491ec5", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/mavricknz/asn1-ber", + "extracted_requirement": "e10e7f5ff26c0805e6dd35fe3f5ec0d6de09c160", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/mavricknz/ldap", + "extracted_requirement": "6e4860d2f38e0a6ccbbb8eda955d80ab4e39f692", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:golang/github.com/sbinet/liner", + "extracted_requirement": "3d8e6ee550f5d4f4105967410a16fd5c8b47bde4", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/calmh/mole" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-package2 b/tests/packagedcode/data/godeps/package2/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-package2 rename to tests/packagedcode/data/godeps/package2/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-package2expected.json b/tests/packagedcode/data/godeps/package2/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-package2expected.json rename to tests/packagedcode/data/godeps/package2/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/package2/Godeps.json-expected-package b/tests/packagedcode/data/godeps/package2/Godeps.json-expected-package new file mode 100644 index 00000000000..9ebd54c31ee --- /dev/null +++ b/tests/packagedcode/data/godeps/package2/Godeps.json-expected-package @@ -0,0 +1,38 @@ +[ + { + "type": "golang", + "namespace": "_/Users/Daryl/Go/src", + "name": "daryl.im", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/_/Users/Daryl/Go/src/daryl.im" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-package3 b/tests/packagedcode/data/godeps/package3/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-package3 rename to tests/packagedcode/data/godeps/package3/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-package3expected.json b/tests/packagedcode/data/godeps/package3/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-package3expected.json rename to tests/packagedcode/data/godeps/package3/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/package3/Godeps.json-expected-package b/tests/packagedcode/data/godeps/package3/Godeps.json-expected-package new file mode 100644 index 00000000000..323aa34c85f --- /dev/null +++ b/tests/packagedcode/data/godeps/package3/Godeps.json-expected-package @@ -0,0 +1,48 @@ +[ + { + "type": "golang", + "namespace": "github.com/monochromegane", + "name": "hoi", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/github.com/jessevdk/go-flags", + "extracted_requirement": "8ec9564882e7923e632f012761c81c46dcf5bec1", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/github.com/monochromegane/hoi" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/godeps/Godeps.json-simple b/tests/packagedcode/data/godeps/simple/Godeps.json similarity index 100% rename from tests/packagedcode/data/godeps/Godeps.json-simple rename to tests/packagedcode/data/godeps/simple/Godeps.json diff --git a/tests/packagedcode/data/godeps/expected/Godeps.json-simpleexpected.json b/tests/packagedcode/data/godeps/simple/Godeps.json-expected similarity index 100% rename from tests/packagedcode/data/godeps/expected/Godeps.json-simpleexpected.json rename to tests/packagedcode/data/godeps/simple/Godeps.json-expected diff --git a/tests/packagedcode/data/godeps/simple/Godeps.json-expected-package b/tests/packagedcode/data/godeps/simple/Godeps.json-expected-package new file mode 100644 index 00000000000..5c564074bbc --- /dev/null +++ b/tests/packagedcode/data/godeps/simple/Godeps.json-expected-package @@ -0,0 +1,48 @@ +[ + { + "type": "golang", + "namespace": "gaelgillard", + "name": "lnk", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Go", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:golang/github.com/codegangsta/cli", + "extracted_requirement": "820deefc9031d101f085ef773425fc6ca7a5363e", + "scope": "Deps", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "godeps", + "purl": "pkg:golang/gaelgillard/lnk" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/kingpin/output.expected.json b/tests/packagedcode/data/golang/gomod/kingpin/output.expected.json index 70ec886c9af..8e262eeb54e 100644 --- a/tests/packagedcode/data/golang/gomod/kingpin/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/kingpin/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -75,9 +75,10 @@ "resolved_package": {} } ], - "purl": "pkg:golang/github.com/alecthomas/kingpin", "repository_homepage_url": "https://pkg.go.dev/github.com/alecthomas/kingpin", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/alecthomas/kingpin" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/opencensus-service/output.expected.json b/tests/packagedcode/data/golang/gomod/opencensus-service/output.expected.json index 803b74e6a57..e7a25f404e7 100644 --- a/tests/packagedcode/data/golang/gomod/opencensus-service/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/opencensus-service/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": "pkg:golang/github.com/census-instrumentation/opencensus-service", "repository_homepage_url": "https://pkg.go.dev/github.com/census-instrumentation/opencensus-service", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/census-instrumentation/opencensus-service" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/participle/output.expected.json b/tests/packagedcode/data/golang/gomod/participle/output.expected.json index 1f6c06c1ff9..e96da4fd23a 100644 --- a/tests/packagedcode/data/golang/gomod/participle/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/participle/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:golang/github.com/alecthomas/participle", "repository_homepage_url": "https://pkg.go.dev/github.com/alecthomas/participle", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/alecthomas/participle" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/sample/output.expected.json b/tests/packagedcode/data/golang/gomod/sample/output.expected.json index 6235d5cb577..989d1115fef 100644 --- a/tests/packagedcode/data/golang/gomod/sample/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/sample/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:golang/github.com/alecthomas/sample", "repository_homepage_url": "https://pkg.go.dev/github.com/alecthomas/sample", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/alecthomas/sample" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/uap-go/output.expected.json b/tests/packagedcode/data/golang/gomod/uap-go/output.expected.json index a725ec9521b..b55c86fbb79 100644 --- a/tests/packagedcode/data/golang/gomod/uap-go/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/uap-go/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": "pkg:golang/github.com/ua-parser/uap-go", "repository_homepage_url": "https://pkg.go.dev/github.com/ua-parser/uap-go", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/ua-parser/uap-go" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gomod/user_agent/output.expected.json b/tests/packagedcode/data/golang/gomod/user_agent/output.expected.json index 412a08b62e1..7292b4eae86 100644 --- a/tests/packagedcode/data/golang/gomod/user_agent/output.expected.json +++ b/tests/packagedcode/data/golang/gomod/user_agent/output.expected.json @@ -25,13 +25,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:golang/github.com/mssola/user_agent", "repository_homepage_url": "https://pkg.go.dev/github.com/mssola/user_agent", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_mod", + "purl": "pkg:golang/github.com/mssola/user_agent" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample1/output.expected.json b/tests/packagedcode/data/golang/gosum/sample1/output.expected.json index 55ed03ce052..545ea3237bd 100644 --- a/tests/packagedcode/data/golang/gosum/sample1/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample1/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample2/output.expected.json b/tests/packagedcode/data/golang/gosum/sample2/output.expected.json index e4e38d79a0c..fc4f60412b7 100644 --- a/tests/packagedcode/data/golang/gosum/sample2/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample2/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample3/output.expected.json b/tests/packagedcode/data/golang/gosum/sample3/output.expected.json index 0ddcfc3c040..f8890ec5952 100644 --- a/tests/packagedcode/data/golang/gosum/sample3/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample3/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample4/output.expected.json b/tests/packagedcode/data/golang/gosum/sample4/output.expected.json index 34f2206265e..2aac085e4da 100644 --- a/tests/packagedcode/data/golang/gosum/sample4/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample4/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,9 +66,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample5/output.expected.json b/tests/packagedcode/data/golang/gosum/sample5/output.expected.json index ab005826509..45cc12215b4 100644 --- a/tests/packagedcode/data/golang/gosum/sample5/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample5/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/golang/gosum/sample6/output.expected.json b/tests/packagedcode/data/golang/gosum/sample6/output.expected.json index 73a0f87bcc3..eda1325754a 100644 --- a/tests/packagedcode/data/golang/gosum/sample6/output.expected.json +++ b/tests/packagedcode/data/golang/gosum/sample6/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "go_sum", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/test_godeps.py b/tests/packagedcode/test_godeps.py index 16a815f83cf..361d34755fe 100644 --- a/tests/packagedcode/test_godeps.py +++ b/tests/packagedcode/test_godeps.py @@ -28,11 +28,13 @@ def test_parse_basic(self): "Deps": [ { "ImportPath": "code.google.com/p/go-netrc/netrc", - "Rev": "28676070ab99" + "Rev": "28676070ab99", + "Comment": null }, { "ImportPath": "github.com/kr/binarydist", - "Rev": "3380ade90f8b0dfa3e363fd7d7e941fa857d0d13" + "Rev": "3380ade90f8b0dfa3e363fd7d7e941fa857d0d13", + "Comment": null } ] }''' @@ -58,64 +60,63 @@ def test_parse_basic(self): results = gd.to_dict() assert results == expected - def check_package(self, test_file, expected_file, regen=REGEN_TEST_FIXTURES): + def check_parse(self, test_file, regen=REGEN_TEST_FIXTURES): + """ + Test godeps parsing and package data creation + """ + test_loc = self.get_test_loc(test_file) + + expected_parse_file = f'{test_file}-expected' + expected_loc = self.get_test_loc(expected_parse_file) results = godeps.parse(location=test_loc) - expected_loc = self.get_test_loc(expected_file) + if regen: - wmode = 'w' - with open(expected_loc, wmode) as ex: + with open(expected_loc, 'w') as ex: json.dump(results, ex, indent=2) with io.open(expected_loc, encoding='utf-8') as ex: expected = json.load(ex) assert sorted(results.items()) == sorted(expected.items()) + expected_package_file = f'{test_file}-expected-package' + expected_loc = self.get_test_loc(expected_package_file) + results = list(godeps.GodepsHandler.parse(location=test_loc)) + results_mapping = [r.to_dict() for r in results] + + if regen: + with open(expected_loc, 'w') as ex: + json.dump(results_mapping, ex, indent=2) + with io.open(expected_loc, encoding='utf-8') as ex: + expected = json.load(ex) + + assert results_mapping == expected + def test_godeps_godeps_godeps_json_comments(self): - self.check_package( - 'godeps/Godeps.json-comments', - 'godeps/expected/Godeps.json-commentsexpected.json') + self.check_parse('godeps/comments/Godeps.json') def test_godeps_godeps_godeps_json_full(self): - self.check_package( - 'godeps/Godeps.json-full', - 'godeps/expected/Godeps.json-fullexpected.json') + self.check_parse('godeps/full/Godeps.json') def test_godeps_godeps_godeps_json_full2(self): - self.check_package( - 'godeps/Godeps.json-full2', - 'godeps/expected/Godeps.json-full2expected.json') + self.check_parse('godeps/full2/Godeps.json') def test_godeps_godeps_godeps_json_medium(self): - self.check_package( - 'godeps/Godeps.json-medium', - 'godeps/expected/Godeps.json-mediumexpected.json') + self.check_parse('godeps/medium/Godeps.json') def test_godeps_godeps_godeps_json_medium2(self): - self.check_package( - 'godeps/Godeps.json-medium2', - 'godeps/expected/Godeps.json-medium2expected.json') + self.check_parse('godeps/medium2/Godeps.json') def test_godeps_godeps_godeps_json_mini(self): - self.check_package( - 'godeps/Godeps.json-mini', - 'godeps/expected/Godeps.json-miniexpected.json') + self.check_parse('godeps/mini/Godeps.json') def test_godeps_godeps_godeps_json_package1(self): - self.check_package( - 'godeps/Godeps.json-package1', - 'godeps/expected/Godeps.json-package1expected.json') + self.check_parse('godeps/package1/Godeps.json') def test_godeps_godeps_godeps_json_package2(self): - self.check_package( - 'godeps/Godeps.json-package2', - 'godeps/expected/Godeps.json-package2expected.json') + self.check_parse('godeps/package2/Godeps.json') def test_godeps_godeps_godeps_json_package3(self): - self.check_package( - 'godeps/Godeps.json-package3', - 'godeps/expected/Godeps.json-package3expected.json') + self.check_parse('godeps/package3/Godeps.json') def test_godeps_godeps_godeps_json_simple(self): - self.check_package( - 'godeps/Godeps.json-simple', - 'godeps/expected/Godeps.json-simpleexpected.json') + self.check_parse('godeps/simple/Godeps.json') diff --git a/tests/packagedcode/test_golang.py b/tests/packagedcode/test_golang.py index 863496b5b6e..58feea2def0 100644 --- a/tests/packagedcode/test_golang.py +++ b/tests/packagedcode/test_golang.py @@ -22,80 +22,80 @@ class TestGolang(PackageTester): def test_gomod_is_package_data_file(self): test_file = self.get_test_loc('golang/gomod/kingpin/go.mod') - assert golang.GoMod.is_package_data_file(test_file) + assert golang.GoModHandler.is_datafile(test_file) def test_parse_gomod_kingpin(self): test_file = self.get_test_loc('golang/gomod/kingpin/go.mod') expected_loc = self.get_test_loc('golang/gomod/kingpin/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gomod_opencensus(self): test_file = self.get_test_loc('golang/gomod/opencensus-service/go.mod') expected_loc = self.get_test_loc('golang/gomod/opencensus-service/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gomod_participle(self): test_file = self.get_test_loc('golang/gomod/participle/go.mod') expected_loc = self.get_test_loc('golang/gomod/participle/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gomod_sample(self): test_file = self.get_test_loc('golang/gomod/sample/go.mod') expected_loc = self.get_test_loc('golang/gomod/sample/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gomod_uap_go(self): test_file = self.get_test_loc('golang/gomod/uap-go/go.mod') expected_loc = self.get_test_loc('golang/gomod/uap-go/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gomod_user_agent(self): test_file = self.get_test_loc('golang/gomod/user_agent/go.mod') expected_loc = self.get_test_loc('golang/gomod/user_agent/output.expected.json') - package = golang.GoMod.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoModHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_gosum_is_package_data_file(self): test_file = self.get_test_loc('golang/gosum/sample1/go.sum') - assert golang.GoSum.is_package_data_file(test_file) + assert golang.GoSumHandler.is_datafile(test_file) def test_parse_gosum_sample1(self): test_file = self.get_test_loc('golang/gosum/sample1/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample1/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gosum_sample2(self): test_file = self.get_test_loc('golang/gosum/sample2/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample2/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gosum_sample3(self): test_file = self.get_test_loc('golang/gosum/sample3/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample3/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gosum_sample4(self): test_file = self.get_test_loc('golang/gosum/sample4/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample4/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gosum_sample5(self): test_file = self.get_test_loc('golang/gosum/sample5/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample5/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_gosum_sample6(self): test_file = self.get_test_loc('golang/gosum/sample6/go.sum') expected_loc = self.get_test_loc('golang/gosum/sample6/output.expected.json') - package = golang.GoSum.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = golang.GoSumHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) From 8e84c6f121e0ef4f291d1b54a456de1911079c20 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 19:54:21 +0200 Subject: [PATCH 20/36] Modernize code for parsing Gemfile.lock Signed-off-by: Philippe Ombredanne --- src/packagedcode/gemfile_lock.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/packagedcode/gemfile_lock.py b/src/packagedcode/gemfile_lock.py index 1a3b6bba16f..bb7ac0d0a53 100644 --- a/src/packagedcode/gemfile_lock.py +++ b/src/packagedcode/gemfile_lock.py @@ -24,7 +24,6 @@ from commoncode.datautils import TriBoolean from textcode import analysis - """ Handle Gemfile.lock Rubygems lockfile. @@ -32,7 +31,7 @@ script is based on and contains code derived from Ruby Bundler: https://raw.githubusercontent.com/bundler/bundler/77e7050364367d98f9bc96911ea2769b69a4735c/lib/bundler/lockfile_parser.rb -TODO: update to latest https://github.com/bundler/bundler/compare/77e7050364367d98f9bc96911ea2769b69a4735c...master#diff-3c625d3cd7d7604b3e2e3c5487a5ede6 +TODO: update to latest https://github.com/bundler/bundler/compare/77e7050364367d98f9bc96911ea2769b69a4735c...master Portions copyright (c) 2010 Andre Arko Portions copyright (c) 2009 Engine Yard @@ -104,15 +103,14 @@ def logger_debug(*args): def logger_debug(*args): return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - # Section headings: these are also used as switches to track a parsing state -PATH = u'PATH' -GIT = u'GIT' -SVN = u'SVN' -GEM = u'GEM' -PLATFORMS = u'PLATFORMS' -DEPENDENCIES = u'DEPENDENCIES' -SPECS = u' specs:' +PATH = 'PATH' +GIT = 'GIT' +SVN = 'SVN' +GEM = 'GEM' +PLATFORMS = 'PLATFORMS' +DEPENDENCIES = 'DEPENDENCIES' +SPECS = ' specs:' # types of Gems, which is really where they are provisioned from # RubyGems repo, local path or VCS @@ -184,7 +182,7 @@ def refine(self): if self.type in (GIT, SVN,): # FIXME: this likely WRONG - # TODO: this may not be correct for SVN BUT SVN has been abandoned + # TODO: this may not be correct for SVN but SVN has been abandoned self.spec_version = self.version if self.revision and not self.ref: self.version = self.revision @@ -344,7 +342,7 @@ def get_option(s): PLATS = re.compile('^ (?P.*)$').match -class GemfileLockParser(object): +class GemfileLockParser: """ Parse a Gemfile.lock. Code originally derived from Bundler's /bundler/lib/bundler/lockfile_parser.rb parser From 2ccba8a8ddc3551873ff4abee58a10c8527cc537 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 19:56:38 +0200 Subject: [PATCH 21/36] Adopt new handler design for Haxe We now have this data file handler: * HaxelibJsonHandler And we assemble it in a Package correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/haxe.py | 154 +++++------------- .../data/haxe/basic/haxelib.json.expected | 7 +- .../data/haxe/basic2/haxelib.json.expected | 7 +- .../data/haxe/deps/haxelib.json.expected | 7 +- .../data/haxe/tags/haxelib.json.expected | 7 +- tests/packagedcode/test_haxe.py | 26 +-- 6 files changed, 67 insertions(+), 141 deletions(-) diff --git a/src/packagedcode/haxe.py b/src/packagedcode/haxe.py index 6ea8c904f39..181056ced36 100644 --- a/src/packagedcode/haxe.py +++ b/src/packagedcode/haxe.py @@ -9,16 +9,11 @@ import io import json -import logging -import attr from packageurl import PackageURL -from commoncode import filetype -from commoncode import fileutils from packagedcode import models - """ Handle haxelib Haxe packages @@ -36,56 +31,24 @@ - https://lib.haxe.org/files/3.0/format-3,4,1.zip """ - -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) +# TODO: Update the license based on a mapping: +# Per the doc: +# Can be GPL, LGPL, BSD, Public (for Public Domain), MIT, or Apache. -@attr.s() -class HaxePackageData(models.PackageData): - - filetypes = tuple() - mimetypes = tuple() - default_type = 'haxe' +class HaxelibJsonHandler(models.DatafileHandler): + datasource_id = 'haxelib_json' + path_patterns = ('*/haxelib.json',) + default_package_type = 'haxe' default_primary_language = 'Haxe' - default_web_baseurl = 'https://lib.haxe.org/p/' - default_download_baseurl = 'https://lib.haxe.org/p/' - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - return haxelib_homepage_url(self.name, baseurl=baseurl) - - def repository_download_url(self, baseurl=default_download_baseurl): - return haxelib_download_url(self.name, self.version, baseurl=baseurl) - - -@attr.s() -class HaxelibJson(HaxePackageData, models.PackageDataFile): - - file_patterns = ('haxelib.json',) - extensions = ('.json',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and fileutils.file_name(location).lower() == 'haxelib.json' + description = 'Haxe haxelib.json metadata file' + documentation_url = 'https://lib.haxe.org/documentation/creating-a-haxelib-package/' @classmethod - def recognize(cls, location): + def parse(cls, location): """ Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + package_data archive, manifest or similar. { "name": "haxelib", @@ -100,84 +63,51 @@ def recognize(cls, location): } """ with io.open(location, encoding='utf-8') as loc: - package_data = json.load(loc) - - package = cls( - name=package_data.get('name'), - version=package_data.get('version'), - homepage_url=package_data.get('url'), - declared_license=package_data.get('license'), - keywords=package_data.get('tags'), - description=package_data.get('description'), + json_data = json.load(loc) + + name = json_data.get('name') + version = json_data.get('version') + + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + name=name, + version=version, + homepage_url=json_data.get('url'), + declared_license=json_data.get('license'), + keywords=json_data.get('tags'), + description=json_data.get('description'), + primary_language=cls.default_primary_language, ) - package.download_url = package.repository_download_url() + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = cls.compute_normalized_license(package_data) + + if name and version: + download_url = f'https://lib.haxe.org/p/{name}/{version}/download/' + package_data.repository_download_url = download_url + package_data.download_url = download_url - for contrib in package_data.get('contributors', []): + if name: + package_data.repository_homepage_url = f'https://lib.haxe.org/p/{name}' + + for contrib in json_data.get('contributors', []): party = models.Party( type=models.party_person, name=contrib, role='contributor', url='https://lib.haxe.org/u/{}'.format(contrib)) - package.parties.append(party) + package_data.parties.append(party) - for dep_name, dep_version in package_data.get('dependencies', {}).items(): + for dep_name, dep_version in json_data.get('dependencies', {}).items(): dep_version = dep_version and dep_version.strip() is_resolved = bool(dep_version) dep_purl = PackageURL( - type='haxe', + type=cls.default_package_type, name=dep_name, version=dep_version ).to_string() dep = models.DependentPackage(purl=dep_purl, is_resolved=is_resolved,) - package.dependencies.append(dep) - - yield package - - -@attr.s() -class HaxePackage(HaxePackageData, models.Package): - """ - A Haxe Package that is created out of one/multiple haxe package - manifests, lockfiles, build scripts and package-like data, with it's files. - """ - - @property - def manifests(self): - return [ - HaxelibJson - ] - - -def haxelib_homepage_url(name, baseurl='https://lib.haxe.org/p/'): - """ - Return an haxelib package homepage URL given a name and a base registry web - interface URL. - - For example: - >>> assert haxelib_homepage_url('format') == u'https://lib.haxe.org/p/format' - """ - baseurl = baseurl.rstrip('/') - return '{baseurl}/{name}'.format(**locals()) - - -def haxelib_download_url(name, version, baseurl='https://lib.haxe.org/p'): - """ - Return an haxelib package tarball download URL given a namespace, name, version - and a base registry URL. - - For example: - >>> assert haxelib_download_url('format', '3.4.1') == u'https://lib.haxe.org/p/format/3.4.1/download/' - """ - if name and version: - baseurl = baseurl.rstrip('/') - return '{baseurl}/{name}/{version}/download/'.format(**locals()) - + package_data.dependencies.append(dep) -def map_license(package): - """ - Update the license based on a mapping: - Per the doc: - Can be GPL, LGPL, BSD, Public (for Public Domain), MIT, or Apache. - """ - raise NotImplementedError + yield package_data diff --git a/tests/packagedcode/data/haxe/basic/haxelib.json.expected b/tests/packagedcode/data/haxe/basic/haxelib.json.expected index cd6488799d2..cdd96106a96 100644 --- a/tests/packagedcode/data/haxe/basic/haxelib.json.expected +++ b/tests/packagedcode/data/haxe/basic/haxelib.json.expected @@ -71,13 +71,14 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:haxe/haxelib@3.4.0", "repository_homepage_url": "https://lib.haxe.org/p/haxelib", "repository_download_url": "https://lib.haxe.org/p/haxelib/3.4.0/download/", - "api_data_url": null + "api_data_url": null, + "datasource_id": "haxelib_json", + "purl": "pkg:haxe/haxelib@3.4.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/haxe/basic2/haxelib.json.expected b/tests/packagedcode/data/haxe/basic2/haxelib.json.expected index 7f4b9a47c24..b68655c3559 100644 --- a/tests/packagedcode/data/haxe/basic2/haxelib.json.expected +++ b/tests/packagedcode/data/haxe/basic2/haxelib.json.expected @@ -38,13 +38,14 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:haxe/hxsocketio@0.1.0", "repository_homepage_url": "https://lib.haxe.org/p/hxsocketio", "repository_download_url": "https://lib.haxe.org/p/hxsocketio/0.1.0/download/", - "api_data_url": null + "api_data_url": null, + "datasource_id": "haxelib_json", + "purl": "pkg:haxe/hxsocketio@0.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/haxe/deps/haxelib.json.expected b/tests/packagedcode/data/haxe/deps/haxelib.json.expected index e5f6a780893..f9e2e012538 100644 --- a/tests/packagedcode/data/haxe/deps/haxelib.json.expected +++ b/tests/packagedcode/data/haxe/deps/haxelib.json.expected @@ -46,8 +46,8 @@ "license_expression": "unknown", "declared_license": "BSD", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -69,9 +69,10 @@ "resolved_package": {} } ], - "purl": "pkg:haxe/selecthxml@0.5.1", "repository_homepage_url": "https://lib.haxe.org/p/selecthxml", "repository_download_url": "https://lib.haxe.org/p/selecthxml/0.5.1/download/", - "api_data_url": null + "api_data_url": null, + "datasource_id": "haxelib_json", + "purl": "pkg:haxe/selecthxml@0.5.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/haxe/tags/haxelib.json.expected b/tests/packagedcode/data/haxe/tags/haxelib.json.expected index ba698788a09..a0b545e3a17 100644 --- a/tests/packagedcode/data/haxe/tags/haxelib.json.expected +++ b/tests/packagedcode/data/haxe/tags/haxelib.json.expected @@ -43,13 +43,14 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:haxe/tink_core@1.18.0", "repository_homepage_url": "https://lib.haxe.org/p/tink_core", "repository_download_url": "https://lib.haxe.org/p/tink_core/1.18.0/download/", - "api_data_url": null + "api_data_url": null, + "datasource_id": "haxelib_json", + "purl": "pkg:haxe/tink_core@1.18.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_haxe.py b/tests/packagedcode/test_haxe.py index de668b79f4e..18595ace995 100644 --- a/tests/packagedcode/test_haxe.py +++ b/tests/packagedcode/test_haxe.py @@ -21,36 +21,28 @@ class TestHaxe(PackageTester): def test_is_manifest_haxelib_json(self): test_file = self.get_test_loc('haxe/basic/haxelib.json') - assert haxe.HaxelibJson.is_package_data_file(test_file) + assert haxe.HaxelibJsonHandler.is_datafile(test_file) def test_parse_basic(self): test_file = self.get_test_loc('haxe/basic/haxelib.json') expected_loc = self.get_test_loc('haxe/basic/haxelib.json.expected') - package = haxe.HaxelibJson.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = haxe.HaxelibJsonHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_basic2(self): test_file = self.get_test_loc('haxe/basic2/haxelib.json') expected_loc = self.get_test_loc('haxe/basic2/haxelib.json.expected') - package = haxe.HaxelibJson.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = haxe.HaxelibJsonHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_deps(self): test_file = self.get_test_loc('haxe/deps/haxelib.json') expected_loc = self.get_test_loc('haxe/deps/haxelib.json.expected') - package = haxe.HaxelibJson.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = haxe.HaxelibJsonHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_tags(self): test_file = self.get_test_loc('haxe/tags/haxelib.json') expected_loc = self.get_test_loc('haxe/tags/haxelib.json.expected') - package = haxe.HaxelibJson.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) - - def test_root_dir(self): - test_file = self.get_test_loc('haxe/tags/haxelib.json') - test_dir = self.get_test_loc('haxe/tags') - codebase = Codebase(test_dir) - manifest_resource = codebase.get_resource_from_path(test_file, absolute=True) - proot = haxe.HaxePackage.get_package_root(manifest_resource, codebase) - assert proot.location == test_dir + package = haxe.HaxelibJsonHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) From 2ad67615e68f8445ca43b85799c13e88df4f5580 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 19:59:17 +0200 Subject: [PATCH 22/36] Adopt new handler design for Maven and JARS We now have these data file handlers: * JavaJarManifestHandler * MavenPomXmlHandler * MavenPomPropertiesHandler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/jar_manifest.py | 86 ++- src/packagedcode/maven.py | 608 +++++++++--------- .../1.6.5/ant-launcher-1.6.5.pom.package.json | 7 +- .../ant/ant/1.6.5/ant-1.6.5.pom.package.json | 7 +- .../antlr/2.7.6/antlr-2.7.6.pom.package.json | 7 +- .../1.0/aopalliance-1.0.pom.package.json | 7 +- .../1.5.3/asm-attrs-1.5.3.pom.package.json | 7 +- .../3.0/asm-parent-3.0.pom.package.json | 7 +- .../asm/asm/1.5.3/asm-1.5.3.pom.package.json | 7 +- .../m2/asm/asm/3.0/asm-3.0.pom.package.json | 7 +- .../1.5.3/aspectjrt-1.5.3.pom.package.json | 7 +- .../1.5.4/aspectjrt-1.5.4.pom.package.json | 7 +- .../1.5.4/aspectjtools-1.5.4.pom.package.json | 7 +- .../aspectjweaver-1.5.4.pom.package.json | 7 +- .../avalon-framework-4.1.3.pom.package.json | 7 +- .../bcel/bcel/5.1/bcel-5.1.pom.package.json | 7 +- .../commons-beanutils-1.6.pom.package.json | 7 +- .../commons-beanutils-1.7.0.pom.package.json | 7 +- .../0.0.203/bndlib-0.0.203.pom.package.json | 7 +- .../0.0.238/bndlib-0.0.238.pom.package.json | 7 +- .../data/m2/bytebuddy/pom.xml.package.json | 7 +- .../0.9.0.4/c3p0-0.9.0.4.pom.package.json | 7 +- .../2.1_3/cglib-nodep-2.1_3.pom.package.json | 7 +- .../cglib/2.1_3/cglib-2.1_3.pom.package.json | 7 +- .../classworlds-1.1-alpha-2.pom.package.json | 7 +- .../1.1/classworlds-1.1.pom.package.json | 7 +- .../1.0/commons-cli-1.0.pom.package.json | 7 +- .../1.3/commons-codec-1.3.pom.package.json | 7 +- .../commons-collections-2.0.pom.package.json | 7 +- .../commons-collections-2.1.pom.package.json | 7 +- .../commons-collections-3.1.pom.package.json | 7 +- .../commons-collections-3.2.pom.package.json | 7 +- ...ommon.collect-0.5.0.alpha.pom.package.json | 7 +- .../jsch/0.1.23/jsch-0.1.23.pom.package.json | 7 +- .../jsch/0.1.27/jsch-0.1.27.pom.package.json | 7 +- .../1.1.11/el-api-1.1.11.pom.package.json | 7 +- .../1.1.11/el-ri-1.1.11.pom.package.json | 7 +- .../jsf-facelets-1.1.14.pom.package.json | 7 +- .../xstream-parent-1.2.2.pom.package.json | 7 +- .../1.2.2/xstream-1.2.2.pom.package.json | 7 +- .../data/m2/depman/foo.pom.package.json | 7 +- .../1.6/commons-digester-1.6.pom.package.json | 7 +- .../1.8/commons-digester-1.8.pom.package.json | 7 +- .../dom4j/1.6.1/dom4j-1.6.1.pom.package.json | 7 +- .../doxia-core-1.0-alpha-4.pom.package.json | 7 +- ...oxia-sink-api-1.0-alpha-4.pom.package.json | 7 +- .../1.0/commons-el-1.0.pom.package.json | 7 +- .../commons-fileupload-1.0.pom.package.json | 7 +- .../1.8.0.7/hsqldb-1.8.0.7.pom.package.json | 7 +- .../1.6.2/httpunit-1.6.2.pom.package.json | 7 +- .../1.3.1/commons-io-1.3.1.pom.package.json | 7 +- .../3.4.GA/javassist-3.4.GA.pom.package.json | 7 +- .../persistence-api-1.0.2.pom.package.json | 7 +- .../1.0/persistence-api-1.0.pom.package.json | 7 +- .../jstl/1.1.0/jstl-1.1.0.pom.package.json | 7 +- .../2.4/servlet-api-2.4.pom.package.json | 7 +- .../2.5/servlet-api-2.5.pom.package.json | 7 +- .../jta/1.0.1B/jta-1.0.1B.pom.package.json | 7 +- .../3.3.ga/javassist-3.3.ga.pom.package.json | 7 +- ...-5.0.0alpha-200607201-119.pom.package.json | 7 +- .../org.mortbay.jetty-5.1.10.pom.package.json | 7 +- .../jtidy-4aug2000r7-dev.pom.package.json | 7 +- .../junit/3.8.1/junit-3.8.1.pom.package.json | 7 +- .../junit/3.8.2/junit-3.8.2.pom.package.json | 7 +- .../junit/4.4/junit-4.4.pom.package.json | 7 +- .../2.1/commons-lang-2.1.pom.package.json | 7 +- .../2.3/commons-lang-2.3.pom.package.json | 7 +- .../2.4/commons-lang-2.4.pom.package.json | 7 +- .../1.2.15/log4j-1.2.15.pom.package.json | 7 +- .../log4j/1.2.9/log4j-1.2.9.pom.package.json | 7 +- ...commons-logging-api-1.0.4.pom.package.json | 7 +- .../commons-logging-1.0.3.pom.package.json | 7 +- .../commons-logging-1.0.4.pom.package.json | 7 +- .../1.0/commons-logging-1.0.pom.package.json | 7 +- .../commons-logging-1.1.1.pom.package.json | 7 +- .../1.1/commons-logging-1.1.pom.package.json | 7 +- .../1.0.1/logkit-1.0.1.pom.package.json | 7 +- .../1.2/commons-math-1.2.pom.package.json | 7 +- ...ysql-connector-java-5.0.4.pom.package.json | 7 +- .../1.0/jcip-annotations-1.0.pom.package.json | 7 +- .../1.2.3/ehcache-1.2.3.pom.package.json | 7 +- .../kxml2/2.2.2/kxml2-2.2.2.pom.package.json | 7 +- ...egi-security-parent-1.0.5.pom.package.json | 7 +- ...egi-security-parent-1.0.7.pom.package.json | 7 +- .../acegi-security-1.0.5.pom.package.json | 7 +- .../acegi-security-1.0.7.pom.package.json | 7 +- .../1.1.1/ajax4jsf-1.1.1.pom.package.json | 7 +- .../1.1.1/master-1.1.1.pom.package.json | 7 +- .../apache/apache/1/apache-1.pom.package.json | 7 +- .../apache/apache/3/apache-3.pom.package.json | 7 +- .../apache/apache/4/apache-4.pom.package.json | 7 +- .../1.22/commons-jaxrs-1.22.pom.package.json | 7 +- .../5/commons-parent-5.pom.package.json | 7 +- .../7/commons-parent-7.pom.package.json | 7 +- .../9/commons-parent-9.pom.package.json | 7 +- .../felix/1.0.0/felix-1.0.0.pom.package.json | 7 +- .../felix/1.0.2/felix-1.0.2.pom.package.json | 7 +- ...maven-bundle-plugin-1.4.0.pom.package.json | 7 +- .../org.osgi.core-1.0.0.pom.package.json | 7 +- ...rg.osgi.service.obr-1.0.1.pom.package.json | 7 +- .../config/1.1/config-1.1.pom.package.json | 7 +- .../1.1/project-config-1.1.pom.package.json | 7 +- .../genesis/1.1/genesis-1.1.pom.package.json | 7 +- ...geronimo-jsp_2.0_spec-1.1.pom.package.json | 7 +- ...mo-servlet_2.4_spec-1.1.1.pom.package.json | 7 +- .../specs/1.2/specs-1.2.pom.package.json | 7 +- .../doxia-core-1.0-alpha-10.pom.package.json | 7 +- .../doxia-core-1.0-alpha-7.pom.package.json | 7 +- .../doxia-core-1.0-alpha-8.pom.package.json | 7 +- ...ration-model-1.0-alpha-10.pom.package.json | 7 +- ...oration-model-1.0-alpha-7.pom.package.json | 7 +- ...oration-model-1.0-alpha-8.pom.package.json | 7 +- ...a-module-apt-1.0-alpha-10.pom.package.json | 7 +- ...a-module-fml-1.0-alpha-10.pom.package.json | 7 +- ...-module-xdoc-1.0-alpha-10.pom.package.json | 7 +- ...module-xhtml-1.0-alpha-10.pom.package.json | 7 +- ...oxia-modules-1.0-alpha-10.pom.package.json | 7 +- ...xia-sink-api-1.0-alpha-10.pom.package.json | 7 +- ...oxia-sink-api-1.0-alpha-7.pom.package.json | 7 +- ...oxia-sink-api-1.0-alpha-8.pom.package.json | 7 +- ...oxia-sink-api-1.0-alpha-9.pom.package.json | 7 +- ...ite-renderer-1.0-alpha-10.pom.package.json | 7 +- ...site-renderer-1.0-alpha-7.pom.package.json | 7 +- ...site-renderer-1.0-alpha-8.pom.package.json | 7 +- ...ia-sitetools-1.0-alpha-10.pom.package.json | 7 +- .../doxia-1.0-alpha-10.pom.package.json | 7 +- .../doxia-1.0-alpha-7.pom.package.json | 7 +- .../doxia-1.0-alpha-8.pom.package.json | 7 +- .../doxia-1.0-alpha-9.pom.package.json | 7 +- .../2.2/maven-archiver-2.2.pom.package.json | 7 +- .../2.3/maven-archiver-2.3.pom.package.json | 7 +- ...en-artifact-manager-2.0.1.pom.package.json | 7 +- ...en-artifact-manager-2.0.2.pom.package.json | 7 +- ...en-artifact-manager-2.0.4.pom.package.json | 7 +- ...en-artifact-manager-2.0.6.pom.package.json | 7 +- ...en-artifact-manager-2.0.7.pom.package.json | 7 +- ...en-artifact-manager-2.0.8.pom.package.json | 7 +- ...aven-artifact-manager-2.0.pom.package.json | 7 +- .../maven-artifact-2.0.1.pom.package.json | 7 +- .../maven-artifact-2.0.2.pom.package.json | 7 +- .../maven-artifact-2.0.4.pom.package.json | 7 +- .../maven-artifact-2.0.5.pom.package.json | 7 +- .../maven-artifact-2.0.6.pom.package.json | 7 +- .../maven-artifact-2.0.7.pom.package.json | 7 +- .../maven-artifact-2.0.8.pom.package.json | 7 +- .../2.0/maven-artifact-2.0.pom.package.json | 7 +- .../2.0.8/maven-core-2.0.8.pom.package.json | 7 +- .../2.0/maven-core-2.0.pom.package.json | 7 +- ...n-error-diagnostics-2.0.8.pom.package.json | 7 +- ...ven-error-diagnostics-2.0.pom.package.json | 7 +- .../2.0.1/maven-model-2.0.1.pom.package.json | 7 +- .../2.0.2/maven-model-2.0.2.pom.package.json | 7 +- .../2.0.4/maven-model-2.0.4.pom.package.json | 7 +- .../2.0.5/maven-model-2.0.5.pom.package.json | 7 +- .../2.0.6/maven-model-2.0.6.pom.package.json | 7 +- .../2.0.7/maven-model-2.0.7.pom.package.json | 7 +- .../2.0.8/maven-model-2.0.8.pom.package.json | 7 +- .../2.0/maven-model-2.0.pom.package.json | 7 +- .../maven-monitor-2.0.8.pom.package.json | 7 +- .../2.0/maven-monitor-2.0.pom.package.json | 7 +- .../1/maven-parent-1.pom.package.json | 7 +- .../4/maven-parent-4.pom.package.json | 7 +- .../5/maven-parent-5.pom.package.json | 7 +- .../6/maven-parent-6.pom.package.json | 7 +- .../7/maven-parent-7.pom.package.json | 7 +- .../8/maven-parent-8.pom.package.json | 7 +- .../maven-plugin-api-2.0.1.pom.package.json | 7 +- .../maven-plugin-api-2.0.2.pom.package.json | 7 +- .../maven-plugin-api-2.0.4.pom.package.json | 7 +- .../maven-plugin-api-2.0.6.pom.package.json | 7 +- .../maven-plugin-api-2.0.7.pom.package.json | 7 +- .../maven-plugin-api-2.0.8.pom.package.json | 7 +- .../2.0/maven-plugin-api-2.0.pom.package.json | 7 +- ...n-plugin-descriptor-2.0.8.pom.package.json | 7 +- ...ven-plugin-descriptor-2.0.pom.package.json | 7 +- ...arameter-documenter-2.0.8.pom.package.json | 7 +- ...-parameter-documenter-2.0.pom.package.json | 7 +- ...ven-plugin-registry-2.0.6.pom.package.json | 7 +- ...ven-plugin-registry-2.0.7.pom.package.json | 7 +- ...ven-plugin-registry-2.0.8.pom.package.json | 7 +- ...maven-plugin-registry-2.0.pom.package.json | 7 +- .../maven-profile-2.0.1.pom.package.json | 7 +- .../maven-profile-2.0.2.pom.package.json | 7 +- .../maven-profile-2.0.4.pom.package.json | 7 +- .../maven-profile-2.0.6.pom.package.json | 7 +- .../maven-profile-2.0.7.pom.package.json | 7 +- .../maven-profile-2.0.8.pom.package.json | 7 +- .../2.0/maven-profile-2.0.pom.package.json | 7 +- .../maven-project-2.0.1.pom.package.json | 7 +- .../maven-project-2.0.2.pom.package.json | 7 +- .../maven-project-2.0.4.pom.package.json | 7 +- .../maven-project-2.0.5.pom.package.json | 7 +- .../maven-project-2.0.6.pom.package.json | 7 +- .../maven-project-2.0.7.pom.package.json | 7 +- .../maven-project-2.0.8.pom.package.json | 7 +- .../2.0/maven-project-2.0.pom.package.json | 7 +- ...repository-metadata-2.0.1.pom.package.json | 7 +- ...repository-metadata-2.0.2.pom.package.json | 7 +- ...repository-metadata-2.0.4.pom.package.json | 7 +- ...repository-metadata-2.0.6.pom.package.json | 7 +- ...repository-metadata-2.0.7.pom.package.json | 7 +- ...repository-metadata-2.0.8.pom.package.json | 7 +- ...n-repository-metadata-2.0.pom.package.json | 7 +- .../maven-settings-2.0.2.pom.package.json | 7 +- .../maven-settings-2.0.4.pom.package.json | 7 +- .../maven-settings-2.0.6.pom.package.json | 7 +- .../maven-settings-2.0.7.pom.package.json | 7 +- .../maven-settings-2.0.8.pom.package.json | 7 +- .../2.0/maven-settings-2.0.pom.package.json | 7 +- .../maven/2.0.1/maven-2.0.1.pom.package.json | 7 +- .../maven/2.0.2/maven-2.0.2.pom.package.json | 7 +- .../maven/2.0.4/maven-2.0.4.pom.package.json | 7 +- .../maven/2.0.5/maven-2.0.5.pom.package.json | 7 +- .../maven/2.0.6/maven-2.0.6.pom.package.json | 7 +- .../maven/2.0.7/maven-2.0.7.pom.package.json | 7 +- .../maven/2.0.8/maven-2.0.8.pom.package.json | 7 +- .../maven/2.0/maven-2.0.pom.package.json | 7 +- .../maven-antrun-plugin-1.1.pom.package.json | 7 +- ...ssembly-plugin-2.2-beta-2.pom.package.json | 7 +- ...ven-checkstyle-plugin-2.1.pom.package.json | 7 +- ...ven-checkstyle-plugin-2.2.pom.package.json | 7 +- .../maven-clean-plugin-2.2.pom.package.json | 7 +- ...ven-compiler-plugin-2.0.2.pom.package.json | 7 +- ...ven-dependency-plugin-2.0.pom.package.json | 7 +- .../maven-install-plugin-2.2.pom.package.json | 7 +- .../2.2/maven-jar-plugin-2.2.pom.package.json | 7 +- ...maven-plugin-parent-2.0.1.pom.package.json | 7 +- .../1/maven-plugins-1.pom.package.json | 7 +- .../10/maven-plugins-10.pom.package.json | 7 +- .../11/maven-plugins-11.pom.package.json | 7 +- .../8/maven-plugins-8.pom.package.json | 7 +- .../2.3/maven-pmd-plugin-2.3.pom.package.json | 7 +- ...release-plugin-2.0-beta-7.pom.package.json | 7 +- ...aven-resources-plugin-2.2.pom.package.json | 7 +- ...en-site-plugin-2.0-beta-6.pom.package.json | 7 +- ...maven-source-plugin-2.0.4.pom.package.json | 7 +- ...ven-surefire-plugin-2.4.2.pom.package.json | 7 +- ...en-war-plugin-2.1-alpha-1.pom.package.json | 7 +- .../4/maven-release-4.pom.package.json | 7 +- ...maven-reporting-api-2.0.4.pom.package.json | 7 +- ...maven-reporting-api-2.0.6.pom.package.json | 7 +- ...maven-reporting-api-2.0.8.pom.package.json | 7 +- .../maven-reporting-api-2.0.pom.package.json | 7 +- ...aven-reporting-impl-2.0.4.pom.package.json | 7 +- .../maven-reporting-impl-2.0.pom.package.json | 7 +- .../maven-reporting-2.0.4.pom.package.json | 7 +- .../maven-reporting-2.0.6.pom.package.json | 7 +- .../maven-reporting-2.0.8.pom.package.json | 7 +- .../2.0/maven-reporting-2.0.pom.package.json | 7 +- .../maven-scm-api-1.0-beta-3.pom.package.json | 7 +- ...manager-plexus-1.0-beta-3.pom.package.json | 7 +- ...n-scm-managers-1.0-beta-3.pom.package.json | 7 +- ...ider-clearcase-1.0-beta-3.pom.package.json | 7 +- ...er-cvs-commons-1.0-beta-3.pom.package.json | 7 +- ...rovider-cvsexe-1.0-beta-3.pom.package.json | 7 +- ...vider-perforce-1.0-beta-3.pom.package.json | 7 +- ...vider-starteam-1.0-beta-3.pom.package.json | 7 +- ...er-svn-commons-1.0-beta-3.pom.package.json | 7 +- ...rovider-svnexe-1.0-beta-3.pom.package.json | 7 +- ...-providers-cvs-1.0-beta-3.pom.package.json | 7 +- ...-providers-svn-1.0-beta-3.pom.package.json | 7 +- ...-scm-providers-1.0-beta-3.pom.package.json | 7 +- .../maven-scm-1.0-beta-3.pom.package.json | 7 +- .../1.1/file-management-1.1.pom.package.json | 7 +- .../1.2/file-management-1.2.pom.package.json | 7 +- ...ifact-filters-1.0-alpha-1.pom.package.json | 7 +- ...mmon-artifact-filters-1.0.pom.package.json | 7 +- ...n-dependency-analyzer-1.0.pom.package.json | 7 +- ...maven-dependency-tree-1.1.pom.package.json | 7 +- .../0.2.0/maven-osgi-0.2.0.pom.package.json | 7 +- ...lugin-testing-harness-1.1.pom.package.json | 7 +- ...itory-builder-1.0-alpha-2.pom.package.json | 7 +- ...maven-shared-components-3.pom.package.json | 7 +- ...maven-shared-components-4.pom.package.json | 7 +- ...maven-shared-components-6.pom.package.json | 7 +- ...maven-shared-components-7.pom.package.json | 7 +- ...maven-shared-components-8.pom.package.json | 7 +- .../1.0/maven-shared-io-1.0.pom.package.json | 7 +- .../1.1/maven-shared-io-1.1.pom.package.json | 7 +- .../2.4.2/surefire-api-2.4.2.pom.package.json | 7 +- .../surefire-booter-2.4.2.pom.package.json | 7 +- .../surefire-providers-2.4.2.pom.package.json | 7 +- .../surefire-testng-2.4.2.pom.package.json | 7 +- .../2.4.2/surefire-2.4.2.pom.package.json | 7 +- .../wagon-file-1.0-alpha-5.pom.package.json | 7 +- .../wagon-file-1.0-beta-2.pom.package.json | 7 +- ...p-lightweight-1.0-alpha-5.pom.package.json | 7 +- ...tp-lightweight-1.0-beta-2.pom.package.json | 7 +- ...on-http-shared-1.0-beta-2.pom.package.json | 7 +- ...-provider-api-1.0-alpha-5.pom.package.json | 7 +- ...-provider-api-1.0-alpha-6.pom.package.json | 7 +- ...n-provider-api-1.0-beta-2.pom.package.json | 7 +- ...agon-providers-1.0-beta-2.pom.package.json | 7 +- ...gon-ssh-common-1.0-beta-2.pom.package.json | 7 +- ...n-ssh-external-1.0-beta-2.pom.package.json | 7 +- .../wagon-ssh-1.0-alpha-5.pom.package.json | 7 +- .../wagon-ssh-1.0-beta-2.pom.package.json | 7 +- .../wagon-1.0-alpha-6.pom.package.json | 7 +- .../wagon-1.0-beta-2.pom.package.json | 7 +- .../build/1.1.1/build-1.1.1.pom.package.json | 7 +- .../1.1.1/mina-core-1.1.1.pom.package.json | 7 +- .../1.1.5/myfaces-api-1.1.5.pom.package.json | 7 +- ...yfaces-core-project-1.1.5.pom.package.json | 7 +- .../1.1.5/myfaces-impl-1.1.5.pom.package.json | 7 +- .../myfaces-master-1.0.5.pom.package.json | 7 +- .../tomahawk-project-1.1.5.pom.package.json | 7 +- .../1.1.5/tomahawk-1.1.5.pom.package.json | 7 +- .../2/shale-master-2.pom.package.json | 7 +- .../1.0.4/shale-parent-1.0.4.pom.package.json | 7 +- .../1.0.4/shale-test-1.0.4.pom.package.json | 7 +- .../1.5/velocity-1.5.pom.package.json | 7 +- .../1.5.4/aspectjrt-1.5.4.pom.package.json | 7 +- .../1.6.0/aspectjrt-1.6.0.pom.package.json | 7 +- .../1.5.4/aspectjtools-1.5.4.pom.package.json | 7 +- .../1.6.0/aspectjtools-1.6.0.pom.package.json | 7 +- .../aspectjweaver-1.5.4.pom.package.json | 7 +- .../aspectjweaver-1.6.0.pom.package.json | 7 +- .../bcprov/1.37/bcprov-1.37.pom.package.json | 7 +- ...n2-1.0-20090219.165735-19.pom.package.json | 7 +- ...sions-maven2-1.0-SNAPSHOT.pom.package.json | 7 +- ...ns-1.0-20090219.165735-20.pom.package.json | 7 +- ...o-extensions-1.0-SNAPSHOT.pom.package.json | 7 +- ...in-1.0-20090219.165735-19.pom.package.json | 7 +- ...aven2-plugin-1.0-SNAPSHOT.pom.package.json | 7 +- ...nt-4.2-20090219.165735-12.pom.package.json | 7 +- ...cargo-parent-4.2-SNAPSHOT.pom.package.json | 7 +- .../aspectj-maven-plugin-1.0.pom.package.json | 7 +- ...gin-1.2-20080813.143116-6.pom.package.json | 7 +- ...maven-plugin-1.2-SNAPSHOT.pom.package.json | 7 +- ...obertura-maven-plugin-2.2.pom.package.json | 7 +- ...ndbugs-maven-plugin-1.1.1.pom.package.json | 7 +- ...-buildnumber-plugin-0.9.6.pom.package.json | 7 +- .../2/mojo-sandbox-2.pom.package.json | 7 +- .../mojo/mojo/11/mojo-11.pom.package.json | 7 +- .../mojo/mojo/12/mojo-12.pom.package.json | 7 +- .../mojo/mojo/14/mojo-14.pom.package.json | 7 +- .../mojo/mojo/16/mojo-16.pom.package.json | 7 +- .../mojo/mojo/17/mojo-17.pom.package.json | 7 +- ...-maven-plugin-1.0-alpha-2.pom.package.json | 7 +- ...en-native-api-1.0-alpha-2.pom.package.json | 7 +- ...en-native-bcc-1.0-alpha-2.pom.package.json | 7 +- ...ve-components-1.0-alpha-2.pom.package.json | 7 +- ...ive-generic-c-1.0-alpha-2.pom.package.json | 7 +- ...-native-javah-1.0-alpha-2.pom.package.json | 7 +- ...ative-manager-1.0-alpha-2.pom.package.json | 7 +- ...n-native-msvc-1.0-alpha-2.pom.package.json | 7 +- .../maven-native-1.0-alpha-2.pom.package.json | 7 +- ...ve-collections-1.0-beta-2.pom.package.json | 7 +- ...xus-archiver-1.0-alpha-10.pom.package.json | 7 +- ...exus-archiver-1.0-alpha-5.pom.package.json | 7 +- ...exus-archiver-1.0-alpha-7.pom.package.json | 7 +- ...exus-archiver-1.0-alpha-9.pom.package.json | 7 +- ...s-classworlds-1.2-alpha-6.pom.package.json | 7 +- ...plexus-compiler-api-1.5.1.pom.package.json | 7 +- ...plexus-compiler-api-1.5.3.pom.package.json | 7 +- ...exus-compiler-javac-1.5.3.pom.package.json | 7 +- ...us-compiler-manager-1.5.3.pom.package.json | 7 +- .../plexus-compiler-1.5.3.pom.package.json | 7 +- .../plexus-compilers-1.5.3.pom.package.json | 7 +- ...omponent-api-1.0-alpha-15.pom.package.json | 7 +- ...omponent-api-1.0-alpha-16.pom.package.json | 7 +- .../plexus-components-1.1.12.pom.package.json | 7 +- .../plexus-components-1.1.4.pom.package.json | 7 +- .../plexus-components-1.1.5.pom.package.json | 7 +- .../plexus-components-1.1.6.pom.package.json | 7 +- .../plexus-components-1.1.7.pom.package.json | 7 +- .../plexus-components-1.1.9.pom.package.json | 7 +- ...iner-default-1.0-alpha-15.pom.package.json | 7 +- ...iner-default-1.0-alpha-22.pom.package.json | 7 +- ...iner-default-1.0-alpha-30.pom.package.json | 7 +- ...ainer-default-1.0-alpha-7.pom.package.json | 7 +- ...ainer-default-1.0-alpha-8.pom.package.json | 7 +- ...ault-1.0-alpha-9-stable-1.pom.package.json | 7 +- ...ainer-default-1.0-alpha-9.pom.package.json | 7 +- ...s-containers-1.0-alpha-15.pom.package.json | 7 +- ...s-containers-1.0-alpha-16.pom.package.json | 7 +- ...s-containers-1.0-alpha-22.pom.package.json | 7 +- ...s-containers-1.0-alpha-30.pom.package.json | 7 +- .../plexus-containers-1.0.3.pom.package.json | 7 +- .../1.0/plexus-digest-1.0.pom.package.json | 7 +- .../plexus-i18n-1.0-beta-6.pom.package.json | 7 +- .../plexus-i18n-1.0-beta-7.pom.package.json | 7 +- ...ractivity-api-1.0-alpha-4.pom.package.json | 7 +- .../plexus-io-1.0-alpha-1.pom.package.json | 7 +- .../plexus-io-1.0-alpha-2.pom.package.json | 7 +- .../1.0.4/plexus-utils-1.0.4.pom.package.json | 7 +- .../1.0.5/plexus-utils-1.0.5.pom.package.json | 7 +- .../1.1/plexus-utils-1.1.pom.package.json | 7 +- .../1.2/plexus-utils-1.2.pom.package.json | 7 +- .../1.3/plexus-utils-1.3.pom.package.json | 7 +- .../1.4.1/plexus-utils-1.4.1.pom.package.json | 7 +- .../1.4.2/plexus-utils-1.4.2.pom.package.json | 7 +- .../1.4.5/plexus-utils-1.4.5.pom.package.json | 7 +- .../1.4.6/plexus-utils-1.4.6.pom.package.json | 7 +- .../1.4.7/plexus-utils-1.4.7.pom.package.json | 7 +- .../1.4.9/plexus-utils-1.4.9.pom.package.json | 7 +- .../1.5.1/plexus-utils-1.5.1.pom.package.json | 7 +- .../plexus-velocity-1.1.2.pom.package.json | 7 +- .../plexus-velocity-1.1.3.pom.package.json | 7 +- .../plexus-velocity-1.1.7.pom.package.json | 7 +- .../1.0.10/plexus-1.0.10.pom.package.json | 7 +- .../1.0.11/plexus-1.0.11.pom.package.json | 7 +- .../1.0.4/plexus-1.0.4.pom.package.json | 7 +- .../1.0.5/plexus-1.0.5.pom.package.json | 7 +- .../1.0.8/plexus-1.0.8.pom.package.json | 7 +- .../1.0.9/plexus-1.0.9.pom.package.json | 7 +- .../2.3/easymock-2.3.pom.package.json | 7 +- ...asymockclassextension-2.3.pom.package.json | 7 +- ...ejb3-persistence-1.0.1.GA.pom.package.json | 7 +- ...nate-annotations-3.2.1.ga.pom.package.json | 7 +- ...nate-annotations-3.3.1.GA.pom.package.json | 7 +- ...mons-annotations-3.0.0.ga.pom.package.json | 7 +- ...te-entitymanager-3.2.1.ga.pom.package.json | 7 +- ...te-entitymanager-3.3.2.GA.pom.package.json | 7 +- .../hibernate-3.2.1.ga.pom.package.json | 7 +- .../hibernate-3.2.6.ga.pom.package.json | 7 +- .../7/jetty-parent-7.pom.package.json | 7 +- .../6.1.5/jetty-util-6.1.5.pom.package.json | 7 +- .../jetty/6.1.5/jetty-6.1.5.pom.package.json | 7 +- ...in-6.1-20090123.170629-84.pom.package.json | 7 +- ...jetty-plugin-6.1-SNAPSHOT.pom.package.json | 7 +- ...ct-6.1-20090123.170629-92.pom.package.json | 7 +- .../project-6.1-SNAPSHOT.pom.package.json | 7 +- .../6.1.5/project-6.1.5.pom.package.json | 7 +- .../servlet-api-2.5-6.1.5.pom.package.json | 7 +- ...nium-client-drivers-0.9.2.pom.package.json | 7 +- ...-java-client-driver-0.9.2.pom.package.json | 7 +- .../selenium-core-0.8.3.pom.package.json | 7 +- .../0.9.1/selenium-rc-0.9.1.pom.package.json | 7 +- .../0.9.2/selenium-rc-0.9.2.pom.package.json | 7 +- ...ium-server-coreless-0.9.1.pom.package.json | 7 +- ...ium-server-coreless-0.9.2.pom.package.json | 7 +- .../selenium-server-0.9.2.pom.package.json | 7 +- .../1.4.2/slf4j-api-1.4.2.pom.package.json | 7 +- .../slf4j-log4j12-1.4.2.pom.package.json | 7 +- .../1.4.2/slf4j-parent-1.4.2.pom.package.json | 7 +- .../2.5.3/spring-aop-2.5.3.pom.package.json | 7 +- .../spring-aspects-2.5.3.pom.package.json | 7 +- .../spring-aspects-2.5.4.pom.package.json | 7 +- .../2.5.3/spring-beans-2.5.3.pom.package.json | 7 +- ...ing-context-support-2.5.3.pom.package.json | 7 +- .../spring-context-2.5.3.pom.package.json | 7 +- .../2.5.3/spring-core-2.5.3.pom.package.json | 7 +- .../2.5.3/spring-jdbc-2.5.3.pom.package.json | 7 +- .../2.5.3/spring-orm-2.5.3.pom.package.json | 7 +- .../2.5.3/spring-test-2.5.3.pom.package.json | 7 +- .../2.5.4/spring-test-2.5.4.pom.package.json | 7 +- .../2.5.3/spring-tx-2.5.3.pom.package.json | 7 +- .../2.5.3/spring-web-2.5.3.pom.package.json | 7 +- .../spring-webmvc-2.5.3.pom.package.json | 7 +- .../spring-webmvc-2.5.4.pom.package.json | 7 +- .../2.5.4/spring-2.5.4.pom.package.json | 7 +- .../testng/5.7/testng-5.7.pom.package.json | 7 +- .../testng/5.8/testng-5.8.pom.package.json | 7 +- .../0.9.5/reportng-0.9.5.pom.package.json | 7 +- .../oro/oro/2.0.7/oro-2.0.7.pom.package.json | 7 +- .../oro/oro/2.0.8/oro-2.0.8.pom.package.json | 7 +- .../p6spy/1.3/p6spy-1.3.pom.package.json | 7 +- .../argus-webservices-2.7.0.pom.package.json | 7 +- .../argus-webservices-2.8.0.pom.package.json | 7 +- .../coreplugin-1.0.0.pom.package.json | 7 +- ...jacuzzi-annotations-0.2.1.pom.package.json | 7 +- .../jacuzzi-database-0.2.1.pom.package.json | 7 +- .../ojcms-beans-0.1-beta.pom.package.json | 7 +- .../pkg-2.0.13.1005.pom.package.json | 7 +- .../jds-2.17.0718b.pom.package.json | 7 +- .../parse_error/jds-3.0.1.pom.package.json | 7 +- .../maven-javanet-plugin-1.7.pom.package.json | 7 +- ...docs-maven-plugin-1.0-RC1.pom.package.json | 7 +- .../common-object-1.0.2.pom.package.json | 7 +- .../osgl-http-1.1.2.pom.package.json | 7 +- .../plexus-containers-1.0.2.pom.package.json | 7 +- .../1.0.3/plexus-root-1.0.3.pom.package.json | 7 +- .../1.0.2/plexus-utils-1.0.2.pom.package.json | 7 +- .../1.5.1/quartz-1.5.1.pom.package.json | 7 +- .../regexp/1.3/regexp-1.3.pom.package.json | 7 +- .../commons-validator-1.1.4.pom.package.json | 7 +- .../commons-validator-1.2.0.pom.package.json | 7 +- .../commons-validator-1.3.1.pom.package.json | 7 +- .../1.4/velocity-dep-1.4.pom.package.json | 7 +- .../1.4/velocity-1.4.pom.package.json | 7 +- .../1.0.b2/xml-apis-1.0.b2.pom.package.json | 7 +- .../2.0.2/xml-apis-2.0.2.pom.package.json | 7 +- .../1.1.3.1/xmlpull-1.1.3.1.pom.package.json | 7 +- .../xpp3_min-1.1.3.4.O.pom.package.json | 7 +- .../activemq-camel-pom.xml.package.json | 7 +- .../adarwin-1.0/adarwin-1.0.pom.package.json | 7 +- .../ant-jai-1.7.0.pom.package.json | 7 +- .../ant-jsch-1.7.0.pom.package.json | 7 +- .../aopalliance-1.0.pom.package.json | 7 +- .../maven2/bcel-5.1/bcel-5.1.pom.package.json | 7 +- .../classworlds-1.1-alpha-2.pom.package.json | 7 +- .../commons-fileupload-1.0.pom.package.json | 7 +- .../commons-validator-1.2.0.pom.package.json | 7 +- .../dbwebx_pom/dbwebx_pom.xml.package.json | 7 +- .../easyconf-0.9.0.pom.package.json | 7 +- ...ndbugs-maven-plugin-1.1.1.pom.package.json | 7 +- .../maven2/fna2_pom/fna2_pom.xml.package.json | 7 +- .../fna_pom_project.xml.package.json | 7 +- .../maven2/foo-pom/foo-pom.xml.package.json | 7 +- .../maven2/gero_pom/gero_pom.xml.package.json | 7 +- .../idega_pom/idega_pom.xml.package.json | 7 +- .../jrecordbind-2.3.4.pom.package.json | 7 +- .../maven2/log4j/log4j-pom.xml.package.json | 7 +- .../logback-access.pom.package.json | 7 +- ...ractivity-api-1.0-alpha-4.pom.package.json | 7 +- .../maven2/pom-generic/pom.xml.package.json | 7 +- .../proper-pom/proper_pom.xml.package.json | 7 +- .../maven2/rel_pom/rel_pom.xml.package.json | 7 +- .../maven2/sea_pom/sea_pom.xml.package.json | 7 +- .../specs-1.3/specs-1.3.pom.package.json | 7 +- .../spring-2.5.4.pom.package.json | 7 +- .../spring-orm-2.5.3.pom.package.json | 7 +- .../spring-webmvc-2.5.3.pom.package.json | 7 +- ...tartup-trigger-plugin-0.1.pom.package.json | 7 +- .../maven2/uni_pom/uni_pom.xml.package.json | 7 +- .../urwerky_pom/urwerky_pom.xml.package.json | 7 +- .../webre_pom/webre_pom.xml.package.json | 7 +- ...format-maven-plugin-3.0.6.pom.package.json | 7 +- .../maven_misc/extracted-jar-expected.json | 498 ++++++++++++++ .../META-INF/MANIFEST.MF | 0 .../activiti-image-generator/pom.properties | 0 .../activiti-image-generator/pom.xml | 0 .../exception/ActivitiImageException.java | 0 .../data/maven_misc/parse/ant-1.6.5.pom.json | 43 +- .../parse/mysql-connector-java-5.0.4.pom.json | 33 +- .../parse/plexus-root-1.0.3.pom.json | 40 +- tests/packagedcode/test_jar_manifest.py | 10 +- tests/packagedcode/test_maven.py | 99 ++- 529 files changed, 2970 insertions(+), 2066 deletions(-) create mode 100644 tests/packagedcode/data/maven_misc/extracted-jar-expected.json rename tests/packagedcode/data/maven_misc/{package_root => extracted-jar}/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF (100%) rename tests/packagedcode/data/maven_misc/{package_root => extracted-jar}/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties (100%) rename tests/packagedcode/data/maven_misc/{package_root => extracted-jar}/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml (100%) rename tests/packagedcode/data/maven_misc/{package_root => extracted-jar}/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java (100%) diff --git a/src/packagedcode/jar_manifest.py b/src/packagedcode/jar_manifest.py index e7b3ae9334c..25cabd3a4ff 100644 --- a/src/packagedcode/jar_manifest.py +++ b/src/packagedcode/jar_manifest.py @@ -9,13 +9,9 @@ import re -import attr - -from commoncode.fileutils import as_posixpath -from packagedcode.utils import normalize_vcs_url -from packagedcode.maven import parse_scm_connection from packagedcode import models - +from packagedcode.maven import parse_scm_connection +from packagedcode.utils import normalize_vcs_url """ A JAR/WAR/EAR and OSGi MANIFEST.MF parser and handler. @@ -27,90 +23,83 @@ """ -@attr.s() -class JavaArchive(models.PackageData): - - filetypes = ('java archive ', 'zip archive',) - mimetypes = ('application/java-archive', 'application/zip',) - default_type = 'jar' +class JavaJarManifestHandler(models.DatafileHandler): + datasource_id = 'java_jar_manifest' + path_patterns = ('*/META-INF/MANIFEST.MF',) + default_package_type = 'jar' default_primary_language = 'Java' + description='Java JAR MANIFEST.MF' + documentation_url='https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html' @classmethod - def get_package_root(cls, manifest_resource, codebase): - if manifest_resource.path.lower().endswith('meta-inf/manifest.mf'): - # the root is the parent of META-INF - return manifest_resource.parent(codebase).parent(codebase) - else: - return manifest_resource + def parse(cls, location): + sections = parse_manifest(location) + if sections: + main_section = sections[0] + manifest = get_normalized_java_manifest_data(main_section) + if manifest: + package_data = models.PackageData(**manifest,) + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = cls.compute_normalized_license(package_data) -@attr.s() -class IvyJar(JavaArchive, models.PackageDataFile): - file_patterns = ('ivy.xml',) - default_type = 'ivy' - default_primary_language = 'Java' - - -@attr.s() -class JavaManifest(JavaArchive, models.PackageDataFile): - file_patterns = ('META-INF/MANIFEST.MF',) - extensions = ('.jar', '.war', '.ear') + yield package_data @classmethod - def get_manifest_data(cls, location): - if cls.is_package_data_file(location): - yield parse_manifest(location) + def assign_package_to_resources(cls, package, resource, codebase): + # we want to root of the jar, two levels up + parent = resource.parent(codebase) + if parent: + parent = resource.parent(codebase) + + if parent: + super().assign_package_to_resources(package, resource=parent, codebase=codebase) - @classmethod - def is_package_data_file(cls, location): - """ - Return Trye if the file at location is a Manifest. - """ - return as_posixpath(location).lower().endswith('meta-inf/manifest.mf') def parse_manifest(location): """ Return a Manifest parsed from the file at `location` or None if this cannot be parsed. """ - mode = 'r' - with open(location, mode) as manifest: + with open(location) as manifest: return parse_manifest_data(manifest.read()) -def parse_manifest_data(manifest): +def parse_manifest_data(manifest_content): """ Return a list of mapping, one for each manifest section (where the first entry is the main section) parsed from a `manifest` string. """ # normalize line endings then split each section: they are separated by two LF - lines = '\n'.join(manifest.splitlines(False)) - sections = re.split('\n\n+', lines) + lines = '\n'.join(manifest_content.splitlines(False)) + sections = re.split(r'\n\n+', lines) return [parse_section(s) for s in sections] def parse_section(section): """ - Return a mapping of key/values for a manifest `section` string + Return a mapping of key/values for a manifest ``section`` string """ data = {} for line in section.splitlines(False): if not line: continue + if not line.startswith(' '): # new key/value key, _, value = line.partition(': ') data[key] = value + else: # continuation of the previous value data[key] += line[1:] return data -def get_normalized_package_data(manifest_main_section): +def get_normalized_java_manifest_data(manifest_mapping): """ Return a mapping of package-like data normalized from a mapping of the - `manifest_main_section` data or None. + `manifest_mapping` data mapping or None. Maven Archiver does this: Manifest-Version: 1.0 @@ -126,12 +115,12 @@ def get_normalized_package_data(manifest_main_section): Implementation-URL: ${project.url} See https://maven.apache.org/shared/maven-archiver/examples/manifest.html """ - if not manifest_main_section or len(manifest_main_section) == 1: + if not manifest_mapping or len(manifest_mapping) == 1: # only a manifest version return def dget(s): - v = manifest_main_section.get(s) + v = manifest_mapping.get(s) if v and v.startswith(('%', '$', '{')): v = None return v @@ -334,7 +323,6 @@ def dget(s): vcs_url = None code_view_url = None - m_vcs_url = dget('Module-Origin') or '' if m_vcs_url.strip(): # this block comes from Gradle? diff --git a/src/packagedcode/maven.py b/src/packagedcode/maven.py index 7c9b087c34d..00e9a029a3a 100644 --- a/src/packagedcode/maven.py +++ b/src/packagedcode/maven.py @@ -9,22 +9,18 @@ import logging import os.path -from os.path import dirname -from os.path import join from pprint import pformat import attr import javaproperties -from lxml import etree +import lxml from packageurl import PackageURL from pymaven import artifact from pymaven import pom from pymaven.pom import strip_namespace -from commoncode import filetype from commoncode import fileutils from packagedcode import models -from packagedcode.models import Package from packagedcode.utils import combine_expressions from packagedcode.utils import normalize_vcs_url from packagedcode.utils import VCS_URLS @@ -41,96 +37,140 @@ logger.setLevel(logging.DEBUG) """ -Support Maven2 POMs. -Attempts to resolve Maven properties when possible. +Support for Maven POMs including resolution of variables using Maven properties +when possible. + +We have seen Maven pom in three layout syles: + +First case: a pom.xml inside a META-INF directory such as in +/META-INF/maven/log4j/log4j/pom.xml possibly with a pom.properties + +Second case: a pom.xml at the root of a package codebase development tree +possibly with a pom.properties + +Third case: a maven repo layout: the jars are side-by-side with a .pom and +there is no pom.properties check if there are side-by-side artifacts """ +# TODO: combine with jar_manifets.py + -@attr.s() -class MavenPomPackageData(models.PackageData): - default_type = 'maven' +class MavenPomXmlHandler(models.DatafileHandler): + datasource_id = 'maven_pom' + # NOTE: Maven 1.x used project.xml + path_patterns = ('*.pom', '*pom.xml',) + default_package_type = 'maven' default_primary_language = 'Java' + description = 'Apache Maven pom' + documentation_url = 'https://maven.apache.org/pom.html' - default_web_baseurl = 'https://repo1.maven.org/maven2' - default_download_baseurl = 'https://repo1.maven.org/maven2' - default_api_baseurl = 'https://repo1.maven.org/maven2' + # TODO: implment more sophistcaed assembly with META-INF/MANIFEST.MF and META-INF/LICENSE @classmethod - def get_package_root(cls, manifest_resource, codebase): - if manifest_resource.name.endswith(('pom.xml', '.pom',)): - # the root is either the parent or further up for poms stored under - # a META-INF dir - package_data = manifest_resource.package_data - if not package_data: - return manifest_resource - package_data = package_data[0] - package = cls.create(**package_data) - ns = package.namespace - name = package.name - path = 'META-INF/maven/{ns}/{name}/pom.xml'.format(**locals()) - if manifest_resource.path.endswith(path): - for ancestor in manifest_resource.ancestors(codebase): - if ancestor.name == 'META-INF': - jar_root_dir = ancestor.parent(codebase) - return jar_root_dir - - return manifest_resource.parent(codebase) - - return manifest_resource - - def repository_homepage_url(self, baseurl=default_web_baseurl): - return build_url( - group_id=self.namespace, - artifact_id=self.name, - version=self.version, - filename=None, - baseurl=baseurl) - - def repository_download_url(self, baseurl=default_download_baseurl): - qualifiers = self.qualifiers or {} - filename = build_filename( - artifact_id=self.name, - version=self.version, - extension=qualifiers.get('type') or 'jar', - classifier=qualifiers.get('classifier')) - - return build_url( - group_id=self.namespace, - artifact_id=self.name, - version=self.version, - filename=filename, - baseurl=baseurl) - - def api_data_url(self, baseurl=default_api_baseurl): - # treat the POM as "API" - filename = build_filename( - artifact_id=self.name, - version=self.version, - extension='pom', - classifier=None) - - return build_url( - group_id=self.namespace, - artifact_id=self.name, - version=self.version, - filename=filename, - baseurl=baseurl) - - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) + def is_datafile(cls, location, filetypes=tuple()): + """ + Return True if the file at location is highly likely to be a POM. + """ + if super().is_datafile(location, filetypes=filetypes): + return True + + T = contenttype.get_type(location) + if not T.is_text: + return + + maven_declarations = ( + b'http://maven.apache.org/POM/4.0.0', + b'http://maven.apache.org/xsd/maven-4.0.0.xsd', + b'', + # somehow we can still parse version 3 poms too + b'', + ) + + # check the POM version in the first 150 lines + with open(location, 'rb') as pom: + for n, line in enumerate(pom): + if n > 150: + break + if any(x in line for x in maven_declarations): + return True @classmethod - def extra_key_files(cls): - return [ - 'META-INF/MANIFEST.MF', - 'META-INF/LICENSE', - ] + def parse(cls, location, base_url='https://repo1.maven.org/maven2'): + return parse( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + primary_language=cls.default_primary_language, + base_url=base_url, + ) @classmethod - def extra_root_dirs(cls): - return [ - 'META-INF' - ] + def assign_package_to_resources(cls, package, resource, codebase): + """ + Set the "for_packages" attributes to ``package`` for the whole + resource tree of a ``resource`` object in the ``codebase``. + + handle the various cases where we can find a POM. + """ + + if resource.path.endswith('.pom'): + # we only treat the parent as the root + return super().assign_package_to_parent_tree(package, resource, codebase) + + # the root is either the parent or further up for poms stored under + # a META-INF dir + + # assert resource.name.endswith('pom.xml') + + root = None + if resource.path.endswith(f'META-INF/maven/{package.namespace}/{package.name}/pom.xml'): + # First case: a pom.xml inside a META-INF directory such as in + # /META-INF/maven/log4j/log4j/pom.xml: This requires going up 5 times + upward_segments = 5 + root = resource + for _ in range(upward_segments): + root = root.parent(codebase) + else: + # Second case: a pom.xml at the root of codebase tree + # FIXME: handle the cases opf parent POMs and nested POMs + root = resource.parent(codebase) + + # get a root in all cases + if not root: + root = resource.parent(codebase) + + return super().assign_package_to_resources(package, resource=root, codebase=codebase) + + @classmethod + def compute_normalized_license(cls, package): + return compute_normalized_license(declared_license=package.declared_license) + +# TODO: assemble with its pom!! +class MavenPomPropertiesHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'maven_pom_properties' + path_patterns = ('*/pom.properties',) + default_package_type = 'maven' + default_primary_language = 'Java' + description = 'Apache Maven pom properties file' + documentation_url = 'https://maven.apache.org/pom.html' + + @classmethod + def parse(cls, location): + """ + Yield PackageData from a pom.properties file (which is typically side- + by-side with its pom file.) + """ + with open(location) as props: + properties = javaproperties.load(props) or {} + if TRACE: + logger.debug(f'MavenPomPropertiesHandler.parse: properties: {properties!r}') + if properties: + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.package_type, + primary_language=cls.primary_language, + extra_data=dict(pom_properties=properties) + ) def compute_normalized_license(declared_license): @@ -140,6 +180,8 @@ def compute_normalized_license(declared_license): if not declared_license: return + # FIXME: declared_license add top comment to declared license as it often + # contains extra detected_licenses = [] for license_declaration in declared_license: @@ -195,29 +237,35 @@ def compute_normalized_license(declared_license): return combine_expressions(detected_licenses) -def build_url(group_id, artifact_id, version, filename, baseurl='http://repo1.maven.org/maven2'): +def build_url( + group_id, + artifact_id, + version, + filename=None, + base_url='https://repo1.maven.org/maven2', +): """ - Return a download URL for a Maven artifact built from its coordinates. + Return a download URL for a Maven artifact built from its POM "coordinates". """ filename = filename or '' if group_id: group_id = group_id.replace('.', '/') - path = '{group_id}/{artifact_id}/{version}'.format(**locals()) + path = f'{group_id}/{artifact_id}/{version}' else: - path = '{artifact_id}/{version}'.format(**locals()) + path = f'{artifact_id}/{version}' - return '{baseurl}/{path}/{filename}'.format(**locals()) + return f'{base_url}/{path}/{filename}' -def build_filename(artifact_id, version, extension, classifier): +def build_filename(artifact_id, version, extension, classifier=None): """ Return a filename for a Maven artifact built from its coordinates. """ extension = extension or '' classifier = classifier or '' if classifier: - classifier = '-' + classifier - return '{artifact_id}-{version}{classifier}.{extension}'.format(**locals()) + classifier = f'-{classifier}' + return f'{artifact_id}-{version}{classifier}.{extension}' class ParentPom(artifact.Artifact): @@ -227,7 +275,7 @@ class ParentPom(artifact.Artifact): """ def __init__(self, coordinate): - super(ParentPom, self).__init__(coordinate) + super().__init__(coordinate) # add empty, pom.Pom-class-like empty attributes self.client = None @@ -253,13 +301,13 @@ def to_dict(self): """ Return a mapping representing this POM """ - return dict([ - ('group_id', self.group_id), - ('artifact_id', self.artifact_id), - ('version', str(self.version) if self.version else None), - ('classifier', self.classifier), - ('type', self.type), - ]) + return { + 'group_id': self.group_id, + 'artifact_id': self.artifact_id, + 'version': str(self.version) if self.version else None, + 'classifier': self.classifier, + 'type': self.type, + } class MavenPom(pom.Pom): @@ -283,11 +331,11 @@ def __init__(self, location=None, text=None): if TRACE: logger.debug('MavenPom.__init__: xml_text: {}'.format(xml_text)) - self._pom_data = etree.fromstring(xml_text, parser=pom.POM_PARSER) + self._pom_data = lxml.etree.fromstring(xml_text, parser=pom.POM_PARSER) # NOQA # collect and then remove XML comments from the XML elements tree self.comments = self._get_comments() - etree.strip_tags(self._pom_data, etree.Comment) + lxml.etree.strip_tags(self._pom_data, lxml.etree.Comment) # NOQA # FIXME: we do not use a client for now. # There are pending issues at pymaven to address this @@ -833,17 +881,17 @@ def has_basic_pom_attributes(pom): return basics -def get_maven_pom(location=None, text=None, check_is_pom=False, extra_properties=None): +def get_maven_pom(location=None): """ Return a MavenPom object from a POM file at `location` or provided as a `text` string. """ - if location and check_is_pom and not PomXml.is_package_data_file(location): - return - pom = MavenPom(location, text) - if not extra_properties: - extra_properties = {} + pom = MavenPom(location=location) + + extra_properties = {} + # do we have a pom.properties file side-by-side? + # FIXME: we should treat pom.properties as a datafile if location and os.path.exists(location): parent = fileutils.parent_directory(location) pom_properties = os.path.join(parent, 'pom.properties') @@ -851,14 +899,15 @@ def get_maven_pom(location=None, text=None, check_is_pom=False, extra_properties with open(pom_properties) as props: properties = javaproperties.load(props) or {} if TRACE: - logger.debug('_get_mavenpom: properties: {}'.format(repr(properties))) + logger.debug(f'get_maven_pom: properties: {properties!r}') extra_properties.update(properties) pom.resolve(**extra_properties) # TODO: we cannot do much without these?? - if check_is_pom and not has_basic_pom_attributes(pom): + hbpa = has_basic_pom_attributes(pom) + + if not hbpa: if TRACE: - logger.debug('_get_mavenpom: has_basic_pom_attributes: {}'.format( - has_basic_pom_attributes(pom))) + logger.debug(f'get_maven_pom: has_basic_pom_attributes: {hbpa}') return return pom @@ -984,144 +1033,170 @@ def get_parties(pom): return parties -@attr.s() -class MavenPackage(MavenPomPackageData, models.Package): +def get_urls(namespace, name, version, qualifiers, base_url='https://repo1.maven.org/maven2'): """ - A Maven Package that is created out of one/multiple maven package - manifests and package-like data, with it's files. + Return a mapping of URLs. """ + if not namespace or not name: + return {} + repository_homepage_url = build_url( + group_id=namespace, + artifact_id=name, + version=version, + base_url=base_url, + ) + + qualifiers = qualifiers or {} + filename = build_filename( + artifact_id=name, + version=version, + extension=qualifiers.get('type') or 'jar', + classifier=qualifiers.get('classifier'), + ) + + repository_download_url = build_url( + group_id=namespace, + artifact_id=name, + version=version, + filename=filename, + base_url=base_url, + ) + + # treat the POM as "API" + pom_filename = build_filename( + artifact_id=name, + version=version, + extension='pom', + ) + + api_data_url = build_url( + group_id=namespace, + artifact_id=name, + version=version, + filename=pom_filename, + base_url=base_url, + ) + + return dict( + repository_homepage_url=repository_homepage_url, + repository_download_url=repository_download_url, + api_data_url=api_data_url, + ) + + +def parse( + location, + datasource_id, + package_type, + primary_language, + base_url='https://repo1.maven.org/maven2', +): + """ + Yield Packagedata objects from parsing a Maven pom file at `location` or + using the provided `text` (one or the other but not both). + """ + pom = get_maven_pom(location=location) - @property - def manifests(self): - return [ - PomXml - ] - - -@attr.s() -class PomXml(MavenPomPackageData, models.PackageDataFile): - - file_patterns = ('*.pom', 'pom.xml',) - extensions = ('.pom',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at location is highly likely to be a POM. - """ - if (not filetype.is_file(location) - or not location.endswith(('.pom', 'pom.xml', 'project.xml',))): - - if TRACE: logger.debug('is_pom: not a POM on name: {}'.format(location)) - return - - T = contenttype.get_type(location) - if T.is_text: - - # check the POM version in the first 150 lines - with open(location, 'rb') as pom: - for n, line in enumerate(pom): - if n > 150: - break - if any(x in line for x in - (b'http://maven.apache.org/POM/4.0.0', - b'http://maven.apache.org/xsd/maven-4.0.0.xsd', - b'', - # somehow we can still parse version 3 poms too - b'',) - ): - return True - - if TRACE: logger.debug('is_pom: not a POM based on type: {}: {}'.format(T, location)) - - @classmethod - def recognize(cls, location, text=None, check_is_pom=True, extra_properties=None): - """ - Yield one or more PomXml objects or None. - - Parse a pom file at `location` or using the provided `text` (one or - the other but not both). - Check if the location is a POM if `check_is_pom` is True. - When resolving the POM, use an optional `extra_properties` mapping - of name/value pairs to resolve properties. - """ - pom = get_maven_pom(location, text, check_is_pom, extra_properties) - if not pom: - return - - if TRACE: - logger.debug('parse: pom:.to_dict()\n{}'.format(pformat(pom.to_dict()))) - - version = pom.version - # pymaven whart - if version == 'latest.release': - version = None - - qualifiers = {} - classifier = pom.classifier - if classifier: - qualifiers['classifier'] = classifier - - packaging = pom.packaging - if packaging: - extension = get_extension(packaging) - if extension and extension not in ('jar', 'pom'): - # we use type as in the PURL spec: this is a problematic field with - # complex defeinition in Maven - qualifiers['type'] = extension - - declared_license = pom.licenses - - source_packages = [] - # TODO: what does this mean???? - if not classifier and all([pom.group_id, pom.artifact_id, version]): - spurl = PackageURL( - type=MavenPomPackageData.default_type, - namespace=pom.group_id, - name=pom.artifact_id, - version=version, - # we hardcode the source qualifier for now... - qualifiers=dict(classifier='sources')) - source_packages = [spurl.to_string()] - - pname = pom.name or '' - pdesc = pom.description or '' - if pname == pdesc: - description = pname - else: - description = [d for d in (pname, pdesc) if d] - description = '\n'.join(description) + if not pom: + return - issue_mngt = pom.issue_management or {} - bug_tracking_url = issue_mngt.get('url') + if TRACE: + ptd = pformat(pom.to_dict()) + logger.debug(f'PomXmlHandler.parse: pom:.to_dict()\n{ptd}') - scm = pom.scm or {} - vcs_url, code_view_url = build_vcs_and_code_view_urls(scm) + version = pom.version + # pymaven whart + if version == 'latest.release': + version = None - # FIXME: there are still other data to map in a Package - yield cls( - namespace=pom.group_id, - name=pom.artifact_id, + qualifiers = {} + classifier = pom.classifier + if classifier: + qualifiers['classifier'] = classifier + + packaging = pom.packaging + if packaging: + extension = get_extension(packaging) + if extension and extension not in ('jar', 'pom'): + # we use type as in the PURL spec: this is a problematic field with + # complex defeinition in Maven + qualifiers['type'] = extension + + declared_license = pom.licenses + + group_id = pom.group_id + artifact_id = pom.artifact_id + + # craft a source package purl for the main binary + source_packages = [] + is_main_binary_jar = not classifier and all([group_id, artifact_id, version]) + if is_main_binary_jar: + spurl = PackageURL( + type=package_type, + namespace=group_id, + name=artifact_id, version=version, - qualifiers=qualifiers or None, - description=description or None, - homepage_url=pom.url or None, - declared_license=declared_license or None, - parties=get_parties(pom), - dependencies=get_dependencies(pom), - source_packages=source_packages, - bug_tracking_url=bug_tracking_url, - vcs_url=vcs_url, - code_view_url=code_view_url, - ) - + # we hardcode the source qualifier for now... + qualifiers=dict(classifier='sources')) + source_packages = [spurl.to_string()] + + pname = pom.name or '' + pdesc = pom.description or '' + if pname == pdesc: + description = pname + else: + description = [d for d in (pname, pdesc) if d] + description = '\n'.join(description) + + issue_mngt = pom.issue_management or {} + bug_tracking_url = issue_mngt.get('url') + + scm = pom.scm or {} + urls = build_vcs_and_code_view_urls(scm) + urls.update(get_urls( + namespace=group_id, + name=artifact_id, version=version, + qualifiers=qualifiers, + base_url=base_url, + )) + + # FIXME: there are still other data to map in a PackageData + package_data = models.PackageData( + datasource_id=datasource_id, + type=package_type, + primary_language=primary_language, + namespace=group_id, + name=artifact_id, + version=version, + qualifiers=qualifiers or None, + description=description or None, + homepage_url=pom.url or None, + declared_license=declared_license or None, + parties=get_parties(pom), + dependencies=get_dependencies(pom), + source_packages=source_packages, + bug_tracking_url=bug_tracking_url, + **urls, + ) + + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) + + yield package_data def build_vcs_and_code_view_urls(scm): """ - Return a proper vcs_url and code_view_url from a Maven `scm` mapping or None. + Return a mapping of vcs_url and code_view_url from a Maven `scm` mapping. For example: - >>> scm = dict(connection='scm:git:git@github.com:histogrammar/histogrammar-scala.git', tag='HEAD', url='https://github.com/histogrammar/histogrammar-scala') + >>> scm = dict( + ... connection='scm:git:git@github.com:histogrammar/histogrammar-scala.git', + ... tag='HEAD', + ... url='https://github.com/histogrammar/histogrammar-scala') + >>> expected = { + ... 'vcs_url': 'git+https://github.com/histogrammar/histogrammar-scala.git', + ... 'code_view_url': 'https://github.com/histogrammar/histogrammar-scala'} + >>> assert build_vcs_and_code_view_urls(scm) == expected """ vcs_url = scm.get('connection') or None @@ -1136,14 +1211,14 @@ def build_vcs_and_code_view_urls(scm): if code_view_url: # we can craft a vcs_url in some cases vcs_url = code_view_url - return vcs_url, code_view_url + return dict(vcs_url=vcs_url, code_view_url=code_view_url,) vcs_url = parse_scm_connection(vcs_url) # TODO: handle tag # vcs_tag = scm.get('tag') - return vcs_url, code_view_url + return dict(vcs_url=vcs_url, code_view_url=code_view_url,) def parse_scm_connection(scm_connection): @@ -1180,59 +1255,6 @@ def parse_scm_connection(scm_connection): return vcs_url -class MavenRecognizer(object): - """ - A package recognizer for Maven-based packages. - """ - - def __init__(self): - return NotImplementedError() - - def recon(self, location): - for f in os.listdir(location): - loc = join(location, f) - if not filetype.is_file(loc): - continue - # a pom is an xml doc - if not PomXml.is_package_data_file(location): - continue - - if f == 'pom.xml': - # first case: a maven pom.xml inside a META-INF directory - # such as in META-INF/maven/log4j/log4j/pom.xml - # the directory tree has a fixed depth - # as is: META-INF/maven/groupid/artifactid/pom.xml - # this will typically be inside a binary jar, so we should find - # a typical structure above - try: - gggp = dirname(dirname(dirname(dirname(loc)))) - if fileutils.file_name(gggp) == 'META-INF': - # recon here: the root of the component is the parent of - # META-INF, return that, with a type and the POM - # manifest to parse. - pass - except: - pass - - # second case: a maven pom.xml at the root of component - # development tree we should find a few extra clues in the - # conventional directory structure below for now we take this as - # being the component root. return that, with a type and the POM - # manifest to parse. - - pass - elif f.endswith('.pom'): - # first case: a maven repo layout - # the jars are side-by-side with the pom - # check if there are side-by-side artifacts - jar = loc.replace('.pom', '.jar') - if os.path.exists(jar): - # return that, with a type and the POM manifest to parse. - pass - - # second case: a maven .pom nested in META-INF - - def get_extension(packaging): """ We only care for certain artifacts extension/packaging/classifier. diff --git a/tests/packagedcode/data/m2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom.package.json b/tests/packagedcode/data/m2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom.package.json index 696d829f213..8fc893ede4c 100644 --- a/tests/packagedcode/data/m2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom.package.json +++ b/tests/packagedcode/data/m2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ant/ant-launcher@1.6.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/ant/ant-launcher@1.6.5", "repository_homepage_url": "https://repo1.maven.org/maven2/ant/ant-launcher/1.6.5/", "repository_download_url": "https://repo1.maven.org/maven2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/ant/ant-launcher/1.6.5/ant-launcher-1.6.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ant/ant-launcher@1.6.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/ant/ant/1.6.5/ant-1.6.5.pom.package.json b/tests/packagedcode/data/m2/ant/ant/1.6.5/ant-1.6.5.pom.package.json index 79be1a6ebe1..85d200c7a32 100644 --- a/tests/packagedcode/data/m2/ant/ant/1.6.5/ant-1.6.5.pom.package.json +++ b/tests/packagedcode/data/m2/ant/ant/1.6.5/ant-1.6.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ant/ant@1.6.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/ant/ant@1.6.5", "repository_homepage_url": "https://repo1.maven.org/maven2/ant/ant/1.6.5/", "repository_download_url": "https://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ant/ant@1.6.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/antlr/antlr/2.7.6/antlr-2.7.6.pom.package.json b/tests/packagedcode/data/m2/antlr/antlr/2.7.6/antlr-2.7.6.pom.package.json index dd82d5984db..af5df7dfa26 100644 --- a/tests/packagedcode/data/m2/antlr/antlr/2.7.6/antlr-2.7.6.pom.package.json +++ b/tests/packagedcode/data/m2/antlr/antlr/2.7.6/antlr-2.7.6.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/antlr/antlr@2.7.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/antlr/antlr@2.7.6", "repository_homepage_url": "https://repo1.maven.org/maven2/antlr/antlr/2.7.6/", "repository_download_url": "https://repo1.maven.org/maven2/antlr/antlr/2.7.6/antlr-2.7.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/antlr/antlr/2.7.6/antlr-2.7.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/antlr/antlr/2.7.6/antlr-2.7.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/antlr/antlr@2.7.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom.package.json b/tests/packagedcode/data/m2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom.package.json index 9f88d3d4745..ea7f15a2e22 100644 --- a/tests/packagedcode/data/m2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aopalliance/aopalliance@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom.package.json b/tests/packagedcode/data/m2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom.package.json index 4f8c646bb8f..e645447d1ef 100644 --- a/tests/packagedcode/data/m2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom.package.json @@ -46,14 +46,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/asm/asm-attrs@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/asm/asm-attrs@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/asm/asm-attrs/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/asm/asm-attrs@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/asm/asm-parent/3.0/asm-parent-3.0.pom.package.json b/tests/packagedcode/data/m2/asm/asm-parent/3.0/asm-parent-3.0.pom.package.json index 073d4728c53..310c2a692c8 100644 --- a/tests/packagedcode/data/m2/asm/asm-parent/3.0/asm-parent-3.0.pom.package.json +++ b/tests/packagedcode/data/m2/asm/asm-parent/3.0/asm-parent-3.0.pom.package.json @@ -46,10 +46,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/asm/asm-parent@3.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -107,8 +107,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/asm/asm-parent@3.0", "repository_homepage_url": "https://repo1.maven.org/maven2/asm/asm-parent/3.0/", "repository_download_url": "https://repo1.maven.org/maven2/asm/asm-parent/3.0/asm-parent-3.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/asm/asm-parent/3.0/asm-parent-3.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/asm/asm-parent/3.0/asm-parent-3.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/asm/asm-parent@3.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/asm/asm/1.5.3/asm-1.5.3.pom.package.json b/tests/packagedcode/data/m2/asm/asm/1.5.3/asm-1.5.3.pom.package.json index 1f8fe9753f9..e0180de62a8 100644 --- a/tests/packagedcode/data/m2/asm/asm/1.5.3/asm-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/asm/asm/1.5.3/asm-1.5.3.pom.package.json @@ -46,14 +46,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/asm/asm@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/asm/asm@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/asm/asm/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/asm/asm/1.5.3/asm-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/asm/asm/1.5.3/asm-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/asm/asm/1.5.3/asm-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/asm/asm@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/asm/asm/3.0/asm-3.0.pom.package.json b/tests/packagedcode/data/m2/asm/asm/3.0/asm-3.0.pom.package.json index 71b9d46e7ca..e2367e11be2 100644 --- a/tests/packagedcode/data/m2/asm/asm/3.0/asm-3.0.pom.package.json +++ b/tests/packagedcode/data/m2/asm/asm/3.0/asm-3.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/asm/asm@3.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/asm/asm@3.0", "repository_homepage_url": "https://repo1.maven.org/maven2/asm/asm/3.0/", "repository_download_url": "https://repo1.maven.org/maven2/asm/asm/3.0/asm-3.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/asm/asm/3.0/asm-3.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/asm/asm/3.0/asm-3.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/asm/asm@3.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom.package.json b/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom.package.json index 653413d601f..09c466328e3 100644 --- a/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aspectj/aspectjrt@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/aspectj/aspectjrt@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aspectj/aspectjrt@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json b/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json index 9d5af844604..b6d78ef6b5b 100644 --- a/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aspectj/aspectjrt@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/aspectj/aspectjrt@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aspectj/aspectjrt@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json b/tests/packagedcode/data/m2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json index c3f271f433d..e6c6108b280 100644 --- a/tests/packagedcode/data/m2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aspectj/aspectjtools@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/aspectj/aspectjtools@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/aspectj/aspectjtools/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aspectj/aspectjtools@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json b/tests/packagedcode/data/m2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json index c600de931d2..e5ec121b051 100644 --- a/tests/packagedcode/data/m2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aspectj/aspectjweaver@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/aspectj/aspectjweaver@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/aspectj/aspectjweaver/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aspectj/aspectjweaver@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/avalon/avalon-framework/4.1.3/avalon-framework-4.1.3.pom.package.json b/tests/packagedcode/data/m2/avalon/avalon-framework/4.1.3/avalon-framework-4.1.3.pom.package.json index 9453c508598..b4103a7905e 100644 --- a/tests/packagedcode/data/m2/avalon/avalon-framework/4.1.3/avalon-framework-4.1.3.pom.package.json +++ b/tests/packagedcode/data/m2/avalon/avalon-framework/4.1.3/avalon-framework-4.1.3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/avalon-framework/avalon-framework@4.1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/avalon-framework/avalon-framework@4.1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/avalon-framework/avalon-framework/4.1.3/", "repository_download_url": "https://repo1.maven.org/maven2/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/avalon-framework/avalon-framework@4.1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/bcel/bcel/5.1/bcel-5.1.pom.package.json b/tests/packagedcode/data/m2/bcel/bcel/5.1/bcel-5.1.pom.package.json index b045797eb36..1bf0871623e 100644 --- a/tests/packagedcode/data/m2/bcel/bcel/5.1/bcel-5.1.pom.package.json +++ b/tests/packagedcode/data/m2/bcel/bcel/5.1/bcel-5.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/bcel/bcel@5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/bcel/bcel@5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/", "repository_download_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/bcel/bcel@5.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom.package.json b/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom.package.json index 91890e56aec..e9b457f7d24 100644 --- a/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom.package.json +++ b/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom.package.json @@ -67,10 +67,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-beanutils/commons-beanutils@1.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -101,8 +101,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.6", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.6/", "repository_download_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.6/commons-beanutils-1.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.6/commons-beanutils-1.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom.package.json b/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom.package.json index 94b3b79a450..0aa73194dca 100644 --- a/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom.package.json +++ b/tests/packagedcode/data/m2/beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-beanutils/commons-beanutils@1.7.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.7.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom.package.json b/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom.package.json index d460d49a2a8..22cf1b6eb3b 100644 --- a/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom.package.json +++ b/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/biz.aQute/bndlib@0.0.203?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/biz.aQute/bndlib@0.0.203", "repository_homepage_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.203/", "repository_download_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.jar", - "api_data_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom" + "api_data_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.203/bndlib-0.0.203.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/biz.aQute/bndlib@0.0.203" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom.package.json b/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom.package.json index 418a93cd515..4d63e496174 100644 --- a/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom.package.json +++ b/tests/packagedcode/data/m2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/biz.aQute/bndlib@0.0.238?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/biz.aQute/bndlib@0.0.238", "repository_homepage_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.238/", "repository_download_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.jar", - "api_data_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom" + "api_data_url": "https://repo1.maven.org/maven2/biz/aQute/bndlib/0.0.238/bndlib-0.0.238.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/biz.aQute/bndlib@0.0.238" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/bytebuddy/pom.xml.package.json b/tests/packagedcode/data/m2/bytebuddy/pom.xml.package.json index 321aebc5bbf..458fa8a3d5c 100644 --- a/tests/packagedcode/data/m2/bytebuddy/pom.xml.package.json +++ b/tests/packagedcode/data/m2/bytebuddy/pom.xml.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/net.bytebuddy/byte-buddy-parent@1.7.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -127,8 +127,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/net.bytebuddy/byte-buddy-parent@1.7.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-parent/1.7.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-parent/1.7.1-SNAPSHOT/byte-buddy-parent-1.7.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-parent/1.7.1-SNAPSHOT/byte-buddy-parent-1.7.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-parent/1.7.1-SNAPSHOT/byte-buddy-parent-1.7.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/net.bytebuddy/byte-buddy-parent@1.7.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom.package.json b/tests/packagedcode/data/m2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom.package.json index f9cbfa80172..d41fee5b4e6 100644 --- a/tests/packagedcode/data/m2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/c3p0/c3p0@0.9.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/c3p0/c3p0@0.9.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/c3p0/c3p0/0.9.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/c3p0/c3p0/0.9.0.4/c3p0-0.9.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/c3p0/c3p0@0.9.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom.package.json b/tests/packagedcode/data/m2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom.package.json index a168344c099..dd8eeadd191 100644 --- a/tests/packagedcode/data/m2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom.package.json +++ b/tests/packagedcode/data/m2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/cglib/cglib-nodep@2.1_3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/cglib/cglib-nodep@2.1_3", "repository_homepage_url": "https://repo1.maven.org/maven2/cglib/cglib-nodep/2.1_3/", "repository_download_url": "https://repo1.maven.org/maven2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar", - "api_data_url": "https://repo1.maven.org/maven2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom" + "api_data_url": "https://repo1.maven.org/maven2/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/cglib/cglib-nodep@2.1_3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/cglib/cglib/2.1_3/cglib-2.1_3.pom.package.json b/tests/packagedcode/data/m2/cglib/cglib/2.1_3/cglib-2.1_3.pom.package.json index 32afd07f55d..7ddf180d2fb 100644 --- a/tests/packagedcode/data/m2/cglib/cglib/2.1_3/cglib-2.1_3.pom.package.json +++ b/tests/packagedcode/data/m2/cglib/cglib/2.1_3/cglib-2.1_3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/cglib/cglib@2.1_3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/cglib/cglib@2.1_3", "repository_homepage_url": "https://repo1.maven.org/maven2/cglib/cglib/2.1_3/", "repository_download_url": "https://repo1.maven.org/maven2/cglib/cglib/2.1_3/cglib-2.1_3.jar", - "api_data_url": "https://repo1.maven.org/maven2/cglib/cglib/2.1_3/cglib-2.1_3.pom" + "api_data_url": "https://repo1.maven.org/maven2/cglib/cglib/2.1_3/cglib-2.1_3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/cglib/cglib@2.1_3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom.package.json b/tests/packagedcode/data/m2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom.package.json index c0fbc1253d4..6d330894990 100644 --- a/tests/packagedcode/data/m2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom.package.json @@ -53,14 +53,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/classworlds/classworlds@1.1-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/classworlds/classworlds/1.1/classworlds-1.1.pom.package.json b/tests/packagedcode/data/m2/classworlds/classworlds/1.1/classworlds-1.1.pom.package.json index 97467b07178..37b63244c5a 100644 --- a/tests/packagedcode/data/m2/classworlds/classworlds/1.1/classworlds-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/classworlds/classworlds/1.1/classworlds-1.1.pom.package.json @@ -53,14 +53,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/classworlds/classworlds@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/classworlds/classworlds@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1/classworlds-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1/classworlds-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1/classworlds-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/classworlds/classworlds@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/cli/commons-cli/1.0/commons-cli-1.0.pom.package.json b/tests/packagedcode/data/m2/cli/commons-cli/1.0/commons-cli-1.0.pom.package.json index fba3fa2ea41..69480b3ffa2 100644 --- a/tests/packagedcode/data/m2/cli/commons-cli/1.0/commons-cli-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/cli/commons-cli/1.0/commons-cli-1.0.pom.package.json @@ -60,10 +60,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-cli/commons-cli@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-cli/commons-cli@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-cli/commons-cli/1.0/commons-cli-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-cli/commons-cli@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/codec/commons-codec/1.3/commons-codec-1.3.pom.package.json b/tests/packagedcode/data/m2/codec/commons-codec/1.3/commons-codec-1.3.pom.package.json index 1a34d8f2566..dbc944937ca 100644 --- a/tests/packagedcode/data/m2/codec/commons-codec/1.3/commons-codec-1.3.pom.package.json +++ b/tests/packagedcode/data/m2/codec/commons-codec/1.3/commons-codec-1.3.pom.package.json @@ -158,10 +158,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-codec/commons-codec@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -174,8 +174,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-codec/commons-codec@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.3/commons-codec-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.3/commons-codec-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-codec/commons-codec/1.3/commons-codec-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-codec/commons-codec@1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/collections/commons-collections/2.0/commons-collections-2.0.pom.package.json b/tests/packagedcode/data/m2/collections/commons-collections/2.0/commons-collections-2.0.pom.package.json index 17a23334e81..6cdd9fe957a 100644 --- a/tests/packagedcode/data/m2/collections/commons-collections/2.0/commons-collections-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/collections/commons-collections/2.0/commons-collections-2.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-collections/commons-collections@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/commons-collections/commons-collections@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.0/commons-collections-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.0/commons-collections-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.0/commons-collections-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-collections/commons-collections@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/collections/commons-collections/2.1/commons-collections-2.1.pom.package.json b/tests/packagedcode/data/m2/collections/commons-collections/2.1/commons-collections-2.1.pom.package.json index b3a650c977b..f6aa67688ec 100644 --- a/tests/packagedcode/data/m2/collections/commons-collections/2.1/commons-collections-2.1.pom.package.json +++ b/tests/packagedcode/data/m2/collections/commons-collections/2.1/commons-collections-2.1.pom.package.json @@ -60,10 +60,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-collections/commons-collections@2.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-collections/commons-collections@2.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.1/commons-collections-2.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.1/commons-collections-2.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/2.1/commons-collections-2.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-collections/commons-collections@2.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/collections/commons-collections/3.1/commons-collections-3.1.pom.package.json b/tests/packagedcode/data/m2/collections/commons-collections/3.1/commons-collections-3.1.pom.package.json index abf780d2981..163437d1b20 100644 --- a/tests/packagedcode/data/m2/collections/commons-collections/3.1/commons-collections-3.1.pom.package.json +++ b/tests/packagedcode/data/m2/collections/commons-collections/3.1/commons-collections-3.1.pom.package.json @@ -466,10 +466,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-collections/commons-collections@3.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -482,8 +482,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-collections/commons-collections@3.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/commons-collections-3.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/commons-collections-3.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/commons-collections-3.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-collections/commons-collections@3.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/collections/commons-collections/3.2/commons-collections-3.2.pom.package.json b/tests/packagedcode/data/m2/collections/commons-collections/3.2/commons-collections-3.2.pom.package.json index 62c2ff5dfa9..c6dc65eda88 100644 --- a/tests/packagedcode/data/m2/collections/commons-collections/3.2/commons-collections-3.2.pom.package.json +++ b/tests/packagedcode/data/m2/collections/commons-collections/3.2/commons-collections-3.2.pom.package.json @@ -697,10 +697,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-collections/commons-collections@3.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -713,8 +713,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-collections/commons-collections@3.2", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2/", "repository_download_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2/commons-collections-3.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2/commons-collections-3.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2/commons-collections-3.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-collections/commons-collections@3.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom.package.json b/tests/packagedcode/data/m2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom.package.json index 9328d078826..a30af65c769 100644 --- a/tests/packagedcode/data/m2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom.package.json +++ b/tests/packagedcode/data/m2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.google.collect/com.ss.c.g.common.collect@0.5.0.alpha?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.google.collect/com.ss.c.g.common.collect@0.5.0.alpha", "repository_homepage_url": "https://repo1.maven.org/maven2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/", "repository_download_url": "https://repo1.maven.org/maven2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/google/collect/com.ss.c.g.common.collect/0.5.0.alpha/com.ss.c.g.common.collect-0.5.0.alpha.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.google.collect/com.ss.c.g.common.collect@0.5.0.alpha" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom.package.json b/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom.package.json index a7aea532c3c..4ac2209c96c 100644 --- a/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom.package.json +++ b/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.jcraft/jsch@0.1.23?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.jcraft/jsch@0.1.23", "repository_homepage_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.23/", "repository_download_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.23/jsch-0.1.23.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.23/jsch-0.1.23.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.jcraft/jsch@0.1.23" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom.package.json b/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom.package.json index 494e2910238..1411b9f6db3 100644 --- a/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom.package.json +++ b/tests/packagedcode/data/m2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.jcraft/jsch@0.1.27?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -55,8 +55,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.jcraft/jsch@0.1.27", "repository_homepage_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.27/", "repository_download_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.27/jsch-0.1.27.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.27/jsch-0.1.27.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.jcraft/jsch@0.1.27" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom.package.json b/tests/packagedcode/data/m2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom.package.json index 8ff06cf41cb..b6ea165a379 100644 --- a/tests/packagedcode/data/m2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom.package.json +++ b/tests/packagedcode/data/m2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.sun.facelets/el-api@1.1.11?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.sun.facelets/el-api@1.1.11", "repository_homepage_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-api/1.1.11/", "repository_download_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-api/1.1.11/el-api-1.1.11.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.sun.facelets/el-api@1.1.11" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom.package.json b/tests/packagedcode/data/m2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom.package.json index 910582ef33f..910261b83a4 100644 --- a/tests/packagedcode/data/m2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom.package.json +++ b/tests/packagedcode/data/m2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.sun.facelets/el-ri@1.1.11?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.sun.facelets/el-ri@1.1.11", "repository_homepage_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-ri/1.1.11/", "repository_download_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/el-ri/1.1.11/el-ri-1.1.11.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.sun.facelets/el-ri@1.1.11" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom.package.json b/tests/packagedcode/data/m2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom.package.json index ecd1ee46373..516d715e088 100644 --- a/tests/packagedcode/data/m2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom.package.json +++ b/tests/packagedcode/data/m2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.sun.facelets/jsf-facelets@1.1.14?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.sun.facelets/jsf-facelets@1.1.14", "repository_homepage_url": "https://repo1.maven.org/maven2/com/sun/facelets/jsf-facelets/1.1.14/", "repository_download_url": "https://repo1.maven.org/maven2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/sun/facelets/jsf-facelets/1.1.14/jsf-facelets-1.1.14.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.sun.facelets/jsf-facelets@1.1.14" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom.package.json b/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom.package.json index 08c9892178c..dbd7038c1ed 100644 --- a/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom.package.json +++ b/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.thoughtworks.xstream/xstream-parent@1.2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.thoughtworks.xstream/xstream-parent@1.2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream-parent/1.2.2/", "repository_download_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream-parent/1.2.2/xstream-parent-1.2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.thoughtworks.xstream/xstream-parent@1.2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom.package.json b/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom.package.json index 63f61917ef5..3e937bb4b3d 100644 --- a/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom.package.json +++ b/tests/packagedcode/data/m2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.thoughtworks.xstream/xstream@1.2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -166,8 +166,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.thoughtworks.xstream/xstream@1.2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.2.2/", "repository_download_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.thoughtworks.xstream/xstream@1.2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/depman/foo.pom.package.json b/tests/packagedcode/data/m2/depman/foo.pom.package.json index 19112984940..37df9288f2f 100644 --- a/tests/packagedcode/data/m2/depman/foo.pom.package.json +++ b/tests/packagedcode/data/m2/depman/foo.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.jboss.shrinkwrap.resolver/shrinkwrap-resolver-bom@3.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.jboss.shrinkwrap.resolver/shrinkwrap-resolver-bom@3.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/3.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/3.0.1/shrinkwrap-resolver-bom-3.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/3.0.1/shrinkwrap-resolver-bom-3.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/3.0.1/shrinkwrap-resolver-bom-3.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.jboss.shrinkwrap.resolver/shrinkwrap-resolver-bom@3.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/digester/commons-digester/1.6/commons-digester-1.6.pom.package.json b/tests/packagedcode/data/m2/digester/commons-digester/1.6/commons-digester-1.6.pom.package.json index a49c815e42e..283ab85dc06 100644 --- a/tests/packagedcode/data/m2/digester/commons-digester/1.6/commons-digester-1.6.pom.package.json +++ b/tests/packagedcode/data/m2/digester/commons-digester/1.6/commons-digester-1.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-digester/commons-digester@1.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-digester/commons-digester@1.6", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.6/", "repository_download_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.6/commons-digester-1.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.6/commons-digester-1.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.6/commons-digester-1.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-digester/commons-digester@1.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/digester/commons-digester/1.8/commons-digester-1.8.pom.package.json b/tests/packagedcode/data/m2/digester/commons-digester/1.8/commons-digester-1.8.pom.package.json index f4a9488871d..35a54c326d2 100644 --- a/tests/packagedcode/data/m2/digester/commons-digester/1.8/commons-digester-1.8.pom.package.json +++ b/tests/packagedcode/data/m2/digester/commons-digester/1.8/commons-digester-1.8.pom.package.json @@ -193,10 +193,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-digester/commons-digester@1.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -236,8 +236,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-digester/commons-digester@1.8", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.8/", "repository_download_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.8/commons-digester-1.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.8/commons-digester-1.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-digester/commons-digester/1.8/commons-digester-1.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-digester/commons-digester@1.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom.package.json b/tests/packagedcode/data/m2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom.package.json index 846bb9fdd1e..5920f124235 100644 --- a/tests/packagedcode/data/m2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom.package.json +++ b/tests/packagedcode/data/m2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom.package.json @@ -137,10 +137,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/dom4j/dom4j@1.6.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -252,8 +252,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/dom4j/dom4j@1.6.1", "repository_homepage_url": "https://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/", "repository_download_url": "https://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/dom4j/dom4j@1.6.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom.package.json b/tests/packagedcode/data/m2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom.package.json index 3a75fb69b38..42077f02312 100644 --- a/tests/packagedcode/data/m2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom.package.json +++ b/tests/packagedcode/data/m2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom.package.json @@ -39,10 +39,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/doxia/doxia-core@1.0-alpha-4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/doxia/doxia-core@1.0-alpha-4", "repository_homepage_url": "https://repo1.maven.org/maven2/doxia/doxia-core/1.0-alpha-4/", "repository_download_url": "https://repo1.maven.org/maven2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/doxia/doxia-core@1.0-alpha-4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom.package.json b/tests/packagedcode/data/m2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom.package.json index 6dcb16e1d49..4856b1477d3 100644 --- a/tests/packagedcode/data/m2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom.package.json +++ b/tests/packagedcode/data/m2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/doxia/doxia-sink-api@1.0-alpha-4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/doxia/doxia-sink-api@1.0-alpha-4", "repository_homepage_url": "https://repo1.maven.org/maven2/doxia/doxia-sink-api/1.0-alpha-4/", "repository_download_url": "https://repo1.maven.org/maven2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/doxia/doxia-sink-api@1.0-alpha-4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/el/commons-el/1.0/commons-el-1.0.pom.package.json b/tests/packagedcode/data/m2/el/commons-el/1.0/commons-el-1.0.pom.package.json index 066625417bb..0cfe16cb42d 100644 --- a/tests/packagedcode/data/m2/el/commons-el/1.0/commons-el-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/el/commons-el/1.0/commons-el-1.0.pom.package.json @@ -74,10 +74,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-el/commons-el@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -108,8 +108,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-el/commons-el@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-el/commons-el/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-el/commons-el/1.0/commons-el-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-el/commons-el/1.0/commons-el-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-el/commons-el/1.0/commons-el-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-el/commons-el@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom.package.json b/tests/packagedcode/data/m2/fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom.package.json index d6a91b82fed..dfda4410e5c 100644 --- a/tests/packagedcode/data/m2/fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom.package.json @@ -74,10 +74,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-fileupload/commons-fileupload@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -99,8 +99,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom.package.json b/tests/packagedcode/data/m2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom.package.json index d3606e848f3..a302976e9eb 100644 --- a/tests/packagedcode/data/m2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/hsqldb/hsqldb@1.8.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/hsqldb/hsqldb@1.8.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/hsqldb/hsqldb@1.8.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom.package.json b/tests/packagedcode/data/m2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom.package.json index e75f80fe422..0d4c9728f5b 100644 --- a/tests/packagedcode/data/m2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom.package.json +++ b/tests/packagedcode/data/m2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/httpunit/httpunit@1.6.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -110,8 +110,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/httpunit/httpunit@1.6.2", "repository_homepage_url": "https://repo1.maven.org/maven2/httpunit/httpunit/1.6.2/", "repository_download_url": "https://repo1.maven.org/maven2/httpunit/httpunit/1.6.2/httpunit-1.6.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/httpunit/httpunit/1.6.2/httpunit-1.6.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/httpunit/httpunit@1.6.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/io/commons-io/1.3.1/commons-io-1.3.1.pom.package.json b/tests/packagedcode/data/m2/io/commons-io/1.3.1/commons-io-1.3.1.pom.package.json index 28bd5499b61..97a7c88e7a8 100644 --- a/tests/packagedcode/data/m2/io/commons-io/1.3.1/commons-io-1.3.1.pom.package.json +++ b/tests/packagedcode/data/m2/io/commons-io/1.3.1/commons-io-1.3.1.pom.package.json @@ -228,10 +228,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-io/commons-io@1.3.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -244,8 +244,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-io/commons-io@1.3.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/commons-io-1.3.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/commons-io-1.3.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/commons-io-1.3.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-io/commons-io@1.3.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom.package.json b/tests/packagedcode/data/m2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom.package.json index c2501d31b07..690916ea33c 100644 --- a/tests/packagedcode/data/m2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom.package.json +++ b/tests/packagedcode/data/m2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javassist/javassist@3.4.GA?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javassist/javassist@3.4.GA", "repository_homepage_url": "https://repo1.maven.org/maven2/javassist/javassist/3.4.GA/", "repository_download_url": "https://repo1.maven.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.jar", - "api_data_url": "https://repo1.maven.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom" + "api_data_url": "https://repo1.maven.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javassist/javassist@3.4.GA" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom.package.json b/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom.package.json index 5cafccfd8e4..d9ea8f95da2 100644 --- a/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.persistence/persistence-api@1.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javax.persistence/persistence-api@1.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.persistence/persistence-api@1.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom.package.json b/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom.package.json index 5689b6279bc..f203bf216ab 100644 --- a/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.persistence/persistence-api@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javax.persistence/persistence-api@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/persistence-api-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.persistence/persistence-api@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom.package.json b/tests/packagedcode/data/m2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom.package.json index 1e447953f1c..bb2c0219dda 100644 --- a/tests/packagedcode/data/m2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom.package.json +++ b/tests/packagedcode/data/m2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.servlet/jstl@1.1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/javax.servlet/jstl@1.1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/servlet/jstl/1.1.0/", "repository_download_url": "https://repo1.maven.org/maven2/javax/servlet/jstl/1.1.0/jstl-1.1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/jstl/1.1.0/jstl-1.1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.servlet/jstl@1.1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom.package.json b/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom.package.json index 811d1dfa1a8..19db740008d 100644 --- a/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom.package.json +++ b/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.servlet/servlet-api@2.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javax.servlet/servlet-api@2.4", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.4/", "repository_download_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.4/servlet-api-2.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.4/servlet-api-2.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.servlet/servlet-api@2.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom.package.json b/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom.package.json index cf809a8b190..134fd8db31c 100644 --- a/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom.package.json +++ b/tests/packagedcode/data/m2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.servlet/servlet-api@2.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javax.servlet/servlet-api@2.5", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.5/", "repository_download_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/servlet/servlet-api/2.5/servlet-api-2.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.servlet/servlet-api@2.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom.package.json b/tests/packagedcode/data/m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom.package.json index c583d3718fa..4c1dc1591f5 100644 --- a/tests/packagedcode/data/m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom.package.json +++ b/tests/packagedcode/data/m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/javax.transaction/jta@1.0.1B?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/javax.transaction/jta@1.0.1B", "repository_homepage_url": "https://repo1.maven.org/maven2/javax/transaction/jta/1.0.1B/", "repository_download_url": "https://repo1.maven.org/maven2/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar", - "api_data_url": "https://repo1.maven.org/maven2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom" + "api_data_url": "https://repo1.maven.org/maven2/javax/transaction/jta/1.0.1B/jta-1.0.1B.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/javax.transaction/jta@1.0.1B" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom.package.json b/tests/packagedcode/data/m2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom.package.json index a30fc38abbf..b4b0f30c1c4 100644 --- a/tests/packagedcode/data/m2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom.package.json +++ b/tests/packagedcode/data/m2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/jboss/javassist@3.3.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/jboss/javassist@3.3.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/jboss/javassist/3.3.ga/", "repository_download_url": "https://repo1.maven.org/maven2/jboss/javassist/3.3.ga/javassist-3.3.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/jboss/javassist/3.3.ga/javassist-3.3.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/jboss/javassist@3.3.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom.package.json b/tests/packagedcode/data/m2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom.package.json index 79e624d5d86..dc6e2c56071 100644 --- a/tests/packagedcode/data/m2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom.package.json +++ b/tests/packagedcode/data/m2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/jboss/jboss-archive-browsing@5.0.0alpha-200607201-119?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/jboss/jboss-archive-browsing@5.0.0alpha-200607201-119", "repository_homepage_url": "https://repo1.maven.org/maven2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/", "repository_download_url": "https://repo1.maven.org/maven2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.jar", - "api_data_url": "https://repo1.maven.org/maven2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom" + "api_data_url": "https://repo1.maven.org/maven2/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/jboss-archive-browsing-5.0.0alpha-200607201-119.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/jboss/jboss-archive-browsing@5.0.0alpha-200607201-119" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom.package.json b/tests/packagedcode/data/m2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom.package.json index 48e558776ab..62e98f206d6 100644 --- a/tests/packagedcode/data/m2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom.package.json +++ b/tests/packagedcode/data/m2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/jetty/org.mortbay.jetty@5.1.10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/jetty/org.mortbay.jetty@5.1.10", "repository_homepage_url": "https://repo1.maven.org/maven2/jetty/org.mortbay.jetty/5.1.10/", "repository_download_url": "https://repo1.maven.org/maven2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.jar", - "api_data_url": "https://repo1.maven.org/maven2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom" + "api_data_url": "https://repo1.maven.org/maven2/jetty/org.mortbay.jetty/5.1.10/org.mortbay.jetty-5.1.10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/jetty/org.mortbay.jetty@5.1.10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom.package.json b/tests/packagedcode/data/m2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom.package.json index fac48434ec6..68aec53cb83 100644 --- a/tests/packagedcode/data/m2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom.package.json +++ b/tests/packagedcode/data/m2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/jtidy/jtidy@4aug2000r7-dev?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/jtidy/jtidy@4aug2000r7-dev", "repository_homepage_url": "https://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev/", "repository_download_url": "https://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.jar", - "api_data_url": "https://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom" + "api_data_url": "https://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/jtidy/jtidy@4aug2000r7-dev" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/junit/junit/3.8.1/junit-3.8.1.pom.package.json b/tests/packagedcode/data/m2/junit/junit/3.8.1/junit-3.8.1.pom.package.json index 3979e829725..c7b8ba046da 100644 --- a/tests/packagedcode/data/m2/junit/junit/3.8.1/junit-3.8.1.pom.package.json +++ b/tests/packagedcode/data/m2/junit/junit/3.8.1/junit-3.8.1.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/junit/junit@3.8.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/junit/junit@3.8.1", "repository_homepage_url": "https://repo1.maven.org/maven2/junit/junit/3.8.1/", "repository_download_url": "https://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/junit/junit@3.8.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/junit/junit/3.8.2/junit-3.8.2.pom.package.json b/tests/packagedcode/data/m2/junit/junit/3.8.2/junit-3.8.2.pom.package.json index ac51346ddf3..df1a696bb92 100644 --- a/tests/packagedcode/data/m2/junit/junit/3.8.2/junit-3.8.2.pom.package.json +++ b/tests/packagedcode/data/m2/junit/junit/3.8.2/junit-3.8.2.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/junit/junit@3.8.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/junit/junit@3.8.2", "repository_homepage_url": "https://repo1.maven.org/maven2/junit/junit/3.8.2/", "repository_download_url": "https://repo1.maven.org/maven2/junit/junit/3.8.2/junit-3.8.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/junit/junit/3.8.2/junit-3.8.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/junit/junit/3.8.2/junit-3.8.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/junit/junit@3.8.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/junit/junit/4.4/junit-4.4.pom.package.json b/tests/packagedcode/data/m2/junit/junit/4.4/junit-4.4.pom.package.json index 3c507e07474..fcf50e779dc 100644 --- a/tests/packagedcode/data/m2/junit/junit/4.4/junit-4.4.pom.package.json +++ b/tests/packagedcode/data/m2/junit/junit/4.4/junit-4.4.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/junit/junit@4.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/junit/junit@4.4", "repository_homepage_url": "https://repo1.maven.org/maven2/junit/junit/4.4/", "repository_download_url": "https://repo1.maven.org/maven2/junit/junit/4.4/junit-4.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/junit/junit/4.4/junit-4.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/junit/junit/4.4/junit-4.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/junit/junit@4.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/lang/commons-lang/2.1/commons-lang-2.1.pom.package.json b/tests/packagedcode/data/m2/lang/commons-lang/2.1/commons-lang-2.1.pom.package.json index 4b7af314071..43228d388c9 100644 --- a/tests/packagedcode/data/m2/lang/commons-lang/2.1/commons-lang-2.1.pom.package.json +++ b/tests/packagedcode/data/m2/lang/commons-lang/2.1/commons-lang-2.1.pom.package.json @@ -536,10 +536,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-lang/commons-lang@2.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -552,8 +552,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-lang/commons-lang@2.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-lang/commons-lang@2.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/lang/commons-lang/2.3/commons-lang-2.3.pom.package.json b/tests/packagedcode/data/m2/lang/commons-lang/2.3/commons-lang-2.3.pom.package.json index b5b0722769e..1500e80c358 100644 --- a/tests/packagedcode/data/m2/lang/commons-lang/2.3/commons-lang-2.3.pom.package.json +++ b/tests/packagedcode/data/m2/lang/commons-lang/2.3/commons-lang-2.3.pom.package.json @@ -613,10 +613,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-lang/commons-lang@2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -629,8 +629,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-lang/commons-lang@2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/", "repository_download_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-lang/commons-lang@2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/lang/commons-lang/2.4/commons-lang-2.4.pom.package.json b/tests/packagedcode/data/m2/lang/commons-lang/2.4/commons-lang-2.4.pom.package.json index 42a6cf2db0e..eafa4f72be1 100644 --- a/tests/packagedcode/data/m2/lang/commons-lang/2.4/commons-lang-2.4.pom.package.json +++ b/tests/packagedcode/data/m2/lang/commons-lang/2.4/commons-lang-2.4.pom.package.json @@ -613,10 +613,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-lang/commons-lang@2.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -629,8 +629,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-lang/commons-lang@2.4", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.4/", "repository_download_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-lang/commons-lang@2.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/log4j/log4j/1.2.15/log4j-1.2.15.pom.package.json b/tests/packagedcode/data/m2/log4j/log4j/1.2.15/log4j-1.2.15.pom.package.json index 9910162b479..e08e62d1a12 100644 --- a/tests/packagedcode/data/m2/log4j/log4j/1.2.15/log4j-1.2.15.pom.package.json +++ b/tests/packagedcode/data/m2/log4j/log4j/1.2.15/log4j-1.2.15.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/log4j/log4j@1.2.15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -100,8 +100,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/log4j/log4j@1.2.15", "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/", "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.jar", - "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom" + "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/log4j/log4j@1.2.15" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/log4j/log4j/1.2.9/log4j-1.2.9.pom.package.json b/tests/packagedcode/data/m2/log4j/log4j/1.2.9/log4j-1.2.9.pom.package.json index 67294acada8..b754d4519c5 100644 --- a/tests/packagedcode/data/m2/log4j/log4j/1.2.9/log4j-1.2.9.pom.package.json +++ b/tests/packagedcode/data/m2/log4j/log4j/1.2.9/log4j-1.2.9.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/log4j/log4j@1.2.9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/log4j/log4j@1.2.9", "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.9/", "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.9/log4j-1.2.9.jar", - "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.9/log4j-1.2.9.pom" + "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.9/log4j-1.2.9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/log4j/log4j@1.2.9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom.package.json index 1e77036a63d..456908319e2 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging-api@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/commons-logging/commons-logging-api@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging-api/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging-api@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging/1.0.3/commons-logging-1.0.3.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging/1.0.3/commons-logging-1.0.3.pom.package.json index 401ac8d6d11..0cb7f994efd 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging/1.0.3/commons-logging-1.0.3.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging/1.0.3/commons-logging-1.0.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging@1.0.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-logging/commons-logging@1.0.3", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.3/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.3/commons-logging-1.0.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.3/commons-logging-1.0.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.3/commons-logging-1.0.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging@1.0.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging/1.0.4/commons-logging-1.0.4.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging/1.0.4/commons-logging-1.0.4.pom.package.json index 6fd6d655c38..e9e672a3244 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging/1.0.4/commons-logging-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging/1.0.4/commons-logging-1.0.4.pom.package.json @@ -102,10 +102,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -145,8 +145,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-logging/commons-logging@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging/1.0/commons-logging-1.0.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging/1.0/commons-logging-1.0.pom.package.json index bbc58f2d1c3..0789639635a 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging/1.0/commons-logging-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging/1.0/commons-logging-1.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/commons-logging/commons-logging@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0/commons-logging-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0/commons-logging-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.0/commons-logging-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging/1.1.1/commons-logging-1.1.1.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging/1.1.1/commons-logging-1.1.1.pom.package.json index 85810df85d0..838c34ed5b4 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging/1.1.1/commons-logging-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging/1.1.1/commons-logging-1.1.1.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -161,8 +161,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-logging/commons-logging@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logging/commons-logging/1.1/commons-logging-1.1.pom.package.json b/tests/packagedcode/data/m2/logging/commons-logging/1.1/commons-logging-1.1.pom.package.json index f0263262510..1e63e28a7ce 100644 --- a/tests/packagedcode/data/m2/logging/commons-logging/1.1/commons-logging-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/logging/commons-logging/1.1/commons-logging-1.1.pom.package.json @@ -123,10 +123,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-logging/commons-logging@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -175,8 +175,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-logging/commons-logging@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1/commons-logging-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1/commons-logging-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1/commons-logging-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-logging/commons-logging@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/logkit/logkit/1.0.1/logkit-1.0.1.pom.package.json b/tests/packagedcode/data/m2/logkit/logkit/1.0.1/logkit-1.0.1.pom.package.json index f05efde17e0..87c80ec9d19 100644 --- a/tests/packagedcode/data/m2/logkit/logkit/1.0.1/logkit-1.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/logkit/logkit/1.0.1/logkit-1.0.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/logkit/logkit@1.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/logkit/logkit@1.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/logkit/logkit/1.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/logkit/logkit/1.0.1/logkit-1.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/logkit/logkit/1.0.1/logkit-1.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/logkit/logkit/1.0.1/logkit-1.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/logkit/logkit@1.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/math/commons-math/1.2/commons-math-1.2.pom.package.json b/tests/packagedcode/data/m2/math/commons-math/1.2/commons-math-1.2.pom.package.json index 8291ec5d354..63a276aee56 100644 --- a/tests/packagedcode/data/m2/math/commons-math/1.2/commons-math-1.2.pom.package.json +++ b/tests/packagedcode/data/m2/math/commons-math/1.2/commons-math-1.2.pom.package.json @@ -193,10 +193,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-math/commons-math@1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -227,8 +227,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-math/commons-math@1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-math/commons-math/1.2/", "repository_download_url": "https://repo1.maven.org/maven2/commons-math/commons-math/1.2/commons-math-1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-math/commons-math/1.2/commons-math-1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-math/commons-math/1.2/commons-math-1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-math/commons-math@1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom.package.json b/tests/packagedcode/data/m2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom.package.json index 07ce513445e..fccf14b4316 100644 --- a/tests/packagedcode/data/m2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/mysql/mysql-connector-java@5.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/mysql/mysql-connector-java@5.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/mysql/mysql-connector-java@5.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom.package.json b/tests/packagedcode/data/m2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom.package.json index 62f729854c5..3eb93719e74 100644 --- a/tests/packagedcode/data/m2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/net.jcip/jcip-annotations@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/net.jcip/jcip-annotations@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/net/jcip/jcip-annotations/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/net.jcip/jcip-annotations@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom.package.json b/tests/packagedcode/data/m2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom.package.json index 491ef1ac6d3..573fe60a32a 100644 --- a/tests/packagedcode/data/m2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom.package.json +++ b/tests/packagedcode/data/m2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom.package.json @@ -81,10 +81,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/net.sf.ehcache/ehcache@1.2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -160,8 +160,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/net.sf.ehcache/ehcache@1.2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/net/sf/ehcache/ehcache/1.2.3/", "repository_download_url": "https://repo1.maven.org/maven2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/net.sf.ehcache/ehcache@1.2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom.package.json b/tests/packagedcode/data/m2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom.package.json index 510ab0febd0..4d49f0193db 100644 --- a/tests/packagedcode/data/m2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom.package.json +++ b/tests/packagedcode/data/m2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom.package.json @@ -46,10 +46,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/net.sf.kxml/kxml2@2.2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -71,8 +71,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/net.sf.kxml/kxml2@2.2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.2.2/", "repository_download_url": "https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/net.sf.kxml/kxml2@2.2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom.package.json b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom.package.json index 3c7dd12e65e..b3df11cee7a 100644 --- a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom.package.json @@ -235,10 +235,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -314,8 +314,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.5/acegi-security-parent-1.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom.package.json b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom.package.json index 7855973aea4..ec71b79ae1c 100644 --- a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom.package.json @@ -235,10 +235,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -314,8 +314,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security-parent/1.0.7/acegi-security-parent-1.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.acegisecurity/acegi-security-parent@1.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom.package.json b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom.package.json index 7d9cb7f46ab..e15f320502f 100644 --- a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.acegisecurity/acegi-security@1.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -238,8 +238,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.acegisecurity/acegi-security@1.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.5/acegi-security-1.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.acegisecurity/acegi-security@1.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom.package.json b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom.package.json index 622a6f6bf1f..9389e3171b4 100644 --- a/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.acegisecurity/acegi-security@1.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -238,8 +238,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.acegisecurity/acegi-security@1.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/acegisecurity/acegi-security/1.0.7/acegi-security-1.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.acegisecurity/acegi-security@1.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom.package.json index 9c79410c832..13f81df8ad5 100644 --- a/tests/packagedcode/data/m2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.ajax4jsf/ajax4jsf@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -175,8 +175,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.ajax4jsf/ajax4jsf@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/ajax4jsf/ajax4jsf/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/ajax4jsf/ajax4jsf/1.1.1/ajax4jsf-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.ajax4jsf/ajax4jsf@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom.package.json index de72286a920..3096a8633c3 100644 --- a/tests/packagedcode/data/m2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom.package.json @@ -53,14 +53,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.ajax4jsf/master@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.ajax4jsf/master@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/ajax4jsf/master/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/ajax4jsf/master/1.1.1/master-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/ajax4jsf/master/1.1.1/master-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.ajax4jsf/master@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/apache/1/apache-1.pom.package.json b/tests/packagedcode/data/m2/org/apache/apache/1/apache-1.pom.package.json index 9daa09f06ba..b50258d9ba0 100644 --- a/tests/packagedcode/data/m2/org/apache/apache/1/apache-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/apache/1/apache-1.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache/apache@1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache/apache@1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/apache/1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/apache/1/apache-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/1/apache-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/1/apache-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache/apache@1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/apache/3/apache-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/apache/3/apache-3.pom.package.json index 2d0dfb77ae3..d0b94cdba73 100644 --- a/tests/packagedcode/data/m2/org/apache/apache/3/apache-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/apache/3/apache-3.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache/apache@3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache/apache@3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/apache/3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/apache/3/apache-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/3/apache-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/3/apache-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache/apache@3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/apache/4/apache-4.pom.package.json b/tests/packagedcode/data/m2/org/apache/apache/4/apache-4.pom.package.json index e84dc020af9..7ede662fde9 100644 --- a/tests/packagedcode/data/m2/org/apache/apache/4/apache-4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/apache/4/apache-4.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache/apache@4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache/apache@4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/apache/4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache/apache@4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom.package.json b/tests/packagedcode/data/m2/org/apache/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom.package.json index 9cfc2422e2f..c214bbb9480 100644 --- a/tests/packagedcode/data/m2/org/apache/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom.package.json @@ -74,10 +74,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/edu.psu.swe.commons/commons-jaxrs@1.22?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -243,8 +243,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/edu.psu.swe.commons/commons-jaxrs@1.22", "repository_homepage_url": "https://repo1.maven.org/maven2/edu/psu/swe/commons/commons-jaxrs/1.22/", "repository_download_url": "https://repo1.maven.org/maven2/edu/psu/swe/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.jar", - "api_data_url": "https://repo1.maven.org/maven2/edu/psu/swe/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom" + "api_data_url": "https://repo1.maven.org/maven2/edu/psu/swe/commons/commons-jaxrs/1.22/commons-jaxrs-1.22.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/edu.psu.swe.commons/commons-jaxrs@1.22" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/5/commons-parent-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/5/commons-parent-5.pom.package.json index 9f7e76f1baa..e04ea6ba383 100644 --- a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/5/commons-parent-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/5/commons-parent-5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.commons/commons-parent@5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.commons/commons-parent@5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-parent-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-parent-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-parent-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.commons/commons-parent@5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/7/commons-parent-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/7/commons-parent-7.pom.package.json index c39134ca4e9..1f1544133e9 100644 --- a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/7/commons-parent-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/7/commons-parent-7.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.commons/commons-parent@7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.commons/commons-parent@7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/7/commons-parent-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/7/commons-parent-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/7/commons-parent-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.commons/commons-parent@7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/9/commons-parent-9.pom.package.json b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/9/commons-parent-9.pom.package.json index d2befcbc31a..d8b94d4364c 100644 --- a/tests/packagedcode/data/m2/org/apache/commons/commons-parent/9/commons-parent-9.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/commons/commons-parent/9/commons-parent-9.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.commons/commons-parent@9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.commons/commons-parent@9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/9/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/9/commons-parent-9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/9/commons-parent-9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/commons/commons-parent/9/commons-parent-9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.commons/commons-parent@9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom.package.json index 42269042829..6d439510658 100644 --- a/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.felix/felix@1.0.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.felix/felix@1.0.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.0/felix-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.0/felix-1.0.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.felix/felix@1.0.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom.package.json index 9a7c8495d2a..9e836854509 100644 --- a/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.felix/felix@1.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.felix/felix@1.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.2/felix-1.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/felix/1.0.2/felix-1.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.felix/felix@1.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom.package.json index 6a0dbc6c1fb..4fa1b322875 100644 --- a/tests/packagedcode/data/m2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.felix/maven-bundle-plugin@1.4.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -202,8 +202,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.felix/maven-bundle-plugin@1.4.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/felix/maven-bundle-plugin/1.4.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/maven-bundle-plugin/1.4.0/maven-bundle-plugin-1.4.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.felix/maven-bundle-plugin@1.4.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom.package.json index f0698c939e8..b4c6abb3ead 100644 --- a/tests/packagedcode/data/m2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom.package.json @@ -32,14 +32,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.felix/org.osgi.core@1.0.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.felix/org.osgi.core@1.0.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.core/1.0.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.core/1.0.0/org.osgi.core-1.0.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.felix/org.osgi.core@1.0.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom.package.json index da2b871ed87..1ff2fcc29c7 100644 --- a/tests/packagedcode/data/m2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.felix/org.osgi.service.obr@1.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.felix/org.osgi.service.obr@1.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.service.obr/1.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/felix/org.osgi.service.obr/1.0.1/org.osgi.service.obr-1.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.felix/org.osgi.service.obr@1.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom.package.json index 4b83f05deaa..0ee39a2b6a2 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.genesis.config/config@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.geronimo.genesis.config/config@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/config/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/config/1.1/config-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.genesis.config/config@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom.package.json index 552f5ed7111..9691003406a 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.genesis.config/project-config@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.genesis.config/project-config@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/project-config/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/config/project-config/1.1/project-config-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.genesis.config/project-config@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom.package.json index 6d19c6ba531..4f1ffa00235 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.genesis/genesis@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.geronimo.genesis/genesis@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/genesis/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/genesis/genesis/1.1/genesis-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.genesis/genesis@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom.package.json index f1154852778..e3e50dc553a 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/geronimo-jsp_2.0_spec@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.specs/geronimo-jsp_2.0_spec@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.1/geronimo-jsp_2.0_spec-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.specs/geronimo-jsp_2.0_spec@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom.package.json index 9b6e353e8f5..0a2a58ece80 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/geronimo-servlet_2.4_spec@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.geronimo.specs/geronimo-servlet_2.4_spec@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.1.1/geronimo-servlet_2.4_spec-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.specs/geronimo-servlet_2.4_spec@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom.package.json index bfaef4ff057..1a353418669 100644 --- a/tests/packagedcode/data/m2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/specs@1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.2/specs-1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.2/specs-1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom.package.json index 9960d6333f7..f23ea6b59cf 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-10/doxia-core-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom.package.json index e7c4c8ee445..dcb9ce8b647 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-7/doxia-core-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom.package.json index e5d41a2668a..eb86408be6e 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-core/1.0-alpha-8/doxia-core-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom.package.json index f2df1fa2d72..6dae3000b5d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-10/doxia-decoration-model-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom.package.json index d8a6df55b50..4082e76e59b 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-7/doxia-decoration-model-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom.package.json index 6a7091adfcc..1001ed1081d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-8/doxia-decoration-model-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-decoration-model@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom.package.json index b0787335a19..a1b1addf389 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-module-apt@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-apt@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-apt/1.0-alpha-10/doxia-module-apt-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-apt@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom.package.json index 7d0b7cf32b3..7ac4a5ac432 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-module-fml@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-fml@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-fml/1.0-alpha-10/doxia-module-fml-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-fml@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom.package.json index a58f809d6c8..f9818f395a6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-module-xdoc@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-xdoc@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xdoc/1.0-alpha-10/doxia-module-xdoc-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-xdoc@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom.package.json index ecfbdd4d7e9..4a627a3dd85 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-module-xhtml@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-xhtml@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-module-xhtml/1.0-alpha-10/doxia-module-xhtml-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-module-xhtml@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom.package.json index 43e6ed3d254..f4ebfd19f2a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-modules@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-modules@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-modules/1.0-alpha-10/doxia-modules-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-modules@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom.package.json index 0805863fcca..be0bf07b214 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-10/doxia-sink-api-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom.package.json index 6367be2fd3c..f9c42a31a58 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom.package.json index c206ce15b00..90e75b2af41 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-8/doxia-sink-api-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom.package.json index e416ffd9bdd..159a97c358d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-9/doxia-sink-api-1.0-alpha-9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-sink-api@1.0-alpha-9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom.package.json index aa58630f0a2..dd1ea317400 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -165,8 +165,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-10/doxia-site-renderer-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom.package.json index 2b175215b30..4a8d227d3ae 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -75,8 +75,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-7/doxia-site-renderer-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom.package.json index ce843295022..8c63d4e1516 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -75,8 +75,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-site-renderer/1.0-alpha-8/doxia-site-renderer-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-site-renderer@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom.package.json index 3c217cfd202..8d25eaa51ba 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia-sitetools@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia-sitetools@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia-sitetools/1.0-alpha-10/doxia-sitetools-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia-sitetools@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom.package.json index cf26128608a..7a2dca04a72 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-10/doxia-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom.package.json index 6cec45c86fe..94edc2aba76 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom.package.json @@ -46,14 +46,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-7/doxia-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom.package.json index 35f03ec91a8..71504496b45 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-8/doxia-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom.package.json index dac477ce90b..28b3628f937 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-9/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/doxia/doxia/1.0-alpha-9/doxia-1.0-alpha-9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.doxia/doxia@1.0-alpha-9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom.package.json index 0ebe24f0352..6bd63964589 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-archiver@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-archiver@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.2/maven-archiver-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-archiver@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom.package.json index 0f5ac3c245f..3ecf5a5f6d3 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-archiver@2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-archiver@2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-archiver@2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom.package.json index 12a82fca81c..b01cd7ea907 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.1/maven-artifact-manager-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom.package.json index 6c2ed0ab61f..f3cbf2a39eb 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.2/maven-artifact-manager-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom.package.json index f1eea970f73..f38dbcc3a6c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.4/maven-artifact-manager-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom.package.json index 8b22d8d56ca..564b90221ac 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom.package.json index 6378b1c0acd..00780d9d4ca 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.7/maven-artifact-manager-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom.package.json index 97ae52cd71a..8763e548306 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0.8/maven-artifact-manager-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom.package.json index f0d61bddb6b..d0e22305ac7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact-manager@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact-manager@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom.package.json index 3237dd08e15..968b83f1314 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.1/maven-artifact-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom.package.json index fa942e34724..a31a1412f59 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.2/maven-artifact-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom.package.json index e34c45278c9..26a5ddea2cb 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.4/maven-artifact-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom.package.json index 69ec09caba6..d6122052223 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.5/maven-artifact-2.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom.package.json index add31b47897..a974e6119b9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.6/maven-artifact-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom.package.json index 474ab36e65b..29da5949924 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.7/maven-artifact-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom.package.json index 823f92300a2..8fa965723e2 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0.8/maven-artifact-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom.package.json index 21520c0fbee..260aa4460af 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-artifact@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom.package.json index 300ff191569..6612f344843 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-core@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -238,8 +238,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-core@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-core@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom.package.json index fd06db8b4b9..0120d2a6920 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-core@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -229,8 +229,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-core@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0/maven-core-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-core/2.0/maven-core-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-core@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom.package.json index bae6871ba23..e0ea5141e26 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0.8/maven-error-diagnostics-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom.package.json index 8077e5bd0e0..dc9b56d0617 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.0/maven-error-diagnostics-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-error-diagnostics@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom.package.json index a5a36c6b25f..3edc3041800 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.1/maven-model-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom.package.json index faef8de31ef..0ede3b87261 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.2/maven-model-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom.package.json index 75800c7ca60..5cf69d0fb87 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.4/maven-model-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom.package.json index fd2bd17002c..dbc20498ebf 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.5/maven-model-2.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom.package.json index 622abe6b780..12db88b2fbb 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom.package.json index 714c7f88562..b2b806d807c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.7/maven-model-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom.package.json index 1f02eb41bba..e32433cc630 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0.8/maven-model-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom.package.json index 62aa81f3d83..254476ab2f3 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-model@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-model@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0/maven-model-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.0/maven-model-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-model@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom.package.json index 14dc9bda71c..a9ca47ef312 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-monitor@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-monitor@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0.8/maven-monitor-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-monitor@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom.package.json index d063385aca6..d947a9ee7d0 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-monitor@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-monitor@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-monitor/2.0/maven-monitor-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-monitor@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/1/maven-parent-1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/1/maven-parent-1.pom.package.json index 4904e79a6c4..11a7b1266be 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/1/maven-parent-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/1/maven-parent-1.pom.package.json @@ -109,14 +109,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/maven-parent-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/maven-parent-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/maven-parent-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/4/maven-parent-4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/4/maven-parent-4.pom.package.json index b6b616968c1..f493b8a541f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/4/maven-parent-4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/4/maven-parent-4.pom.package.json @@ -123,14 +123,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/4/maven-parent-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/4/maven-parent-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/4/maven-parent-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/5/maven-parent-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/5/maven-parent-5.pom.package.json index 4f82c9a90de..77be00c3ed6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/5/maven-parent-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/5/maven-parent-5.pom.package.json @@ -165,14 +165,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/6/maven-parent-6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/6/maven-parent-6.pom.package.json index 5534fa6c80e..af680fa3f8a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/6/maven-parent-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/6/maven-parent-6.pom.package.json @@ -319,14 +319,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/6/maven-parent-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/6/maven-parent-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/6/maven-parent-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/7/maven-parent-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/7/maven-parent-7.pom.package.json index cbbaed508d6..54d73f06443 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/7/maven-parent-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/7/maven-parent-7.pom.package.json @@ -333,14 +333,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/7/maven-parent-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/7/maven-parent-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/7/maven-parent-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/8/maven-parent-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/8/maven-parent-8.pom.package.json index 766ead851e6..d2ff22d50b6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-parent/8/maven-parent-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-parent/8/maven-parent-8.pom.package.json @@ -347,14 +347,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-parent@8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven/maven-parent@8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/8/maven-parent-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/8/maven-parent-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-parent/8/maven-parent-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-parent@8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom.package.json index 3c8b7f0c1aa..c5ffed970e4 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.1/maven-plugin-api-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom.package.json index da2476cd1a0..0fe44d97aea 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.2/maven-plugin-api-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom.package.json index 9ddc295f61e..0ecaab0a937 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.4/maven-plugin-api-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom.package.json index b448f544826..47ad9ae0a00 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom.package.json index 1f1aa46b756..da68fde3bd9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.7/maven-plugin-api-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom.package.json index 80e115c1acf..3fe0322ea88 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom.package.json index 46763daa884..ae511a3faef 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-api@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-api@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom.package.json index 4e085208377..e380b0ecd5a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0.8/maven-plugin-descriptor-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom.package.json index 4e431715ead..24b166538a9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-descriptor/2.0/maven-plugin-descriptor-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-descriptor@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom.package.json index 8f43c9c9ee5..c07fd61c599 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0.8/maven-plugin-parameter-documenter-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom.package.json index b54643bf231..79c25f27161 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-parameter-documenter/2.0/maven-plugin-parameter-documenter-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-parameter-documenter@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom.package.json index 93c0ab1fcbe..749c47d0ff1 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.6/maven-plugin-registry-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom.package.json index 8bc6d56014b..6becb3dae29 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.7/maven-plugin-registry-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom.package.json index 48840bb7fe2..aa7540f7dd2 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0.8/maven-plugin-registry-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom.package.json index 5b683d295ca..9bed6bbd0d0 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-plugin-registry@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.0/maven-plugin-registry-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-plugin-registry@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom.package.json index dd020f3e989..27448fb2e2d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.1/maven-profile-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom.package.json index 443bb50756f..a8eb2150735 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.2/maven-profile-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom.package.json index dec4712c951..5d692944bb8 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.4/maven-profile-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom.package.json index b2a1c819dbb..8620633d472 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.6/maven-profile-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom.package.json index 062d905a3e5..0a082100081 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.7/maven-profile-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom.package.json index d584207b36b..860cb0f89bf 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0.8/maven-profile-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom.package.json index 7d743b4e34f..c2828186a7b 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-profile@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-profile@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.0/maven-profile-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-profile@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom.package.json index 1db55f50331..f82bf5e94af 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.1/maven-project-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom.package.json index deb685f5044..6574d16d173 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.2/maven-project-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom.package.json index c0db2f879f5..b7d9ab93071 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -103,8 +103,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.4/maven-project-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom.package.json index c7bca4e07eb..46318a70cc4 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -103,8 +103,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.5/maven-project-2.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom.package.json index d272220ba1a..050a6b381a6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.6/maven-project-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom.package.json index 7489b7cb9c5..251bf597e96 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.7/maven-project-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom.package.json index acb3e1dad82..2e00420584f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom.package.json index 6dcbd0453ad..a94ddeb2d02 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-project@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-project@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0/maven-project-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.0/maven-project-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-project@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom.package.json index 9f7b79e41c5..65813880c0f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.1/maven-repository-metadata-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom.package.json index 08c7e715b6e..0f1d29e59a2 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.2/maven-repository-metadata-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom.package.json index 9eba1b7da29..4c2e4a850d9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.4/maven-repository-metadata-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom.package.json index 553566ee47d..0d8f5bdab86 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom.package.json index 685a217f55f..b50826f0f98 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.7/maven-repository-metadata-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom.package.json index a4107cd5734..4e47e1891af 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0.8/maven-repository-metadata-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom.package.json index df96c7af23f..b64c9224cff 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-repository-metadata@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-repository-metadata@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom.package.json index c97eb82eb8c..da3a4e5aaa1 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.2/maven-settings-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom.package.json index 0ce61b5451c..6a947880ca7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.4/maven-settings-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom.package.json index 39d1d5f738d..07d16108157 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.6/maven-settings-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom.package.json index 97171bf0486..2ea30d2a7d5 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.7/maven-settings-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom.package.json index 316a458d134..8469a104a7f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0.8/maven-settings-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom.package.json index b39b9ca25c4..0ea86966b36 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven-settings@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven-settings@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.0/maven-settings-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven-settings@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom.package.json index fb7e94c8928..df895ddd141 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom.package.json @@ -95,10 +95,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -165,8 +165,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.1/maven-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.1/maven-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom.package.json index 2515686b56f..351d6e935ed 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom.package.json @@ -95,10 +95,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -174,8 +174,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.2/maven-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.2/maven-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom.package.json index ba7f17b1aa7..3ce8b8fd904 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom.package.json @@ -95,10 +95,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -174,8 +174,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.4/maven-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.4/maven-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom.package.json index 434b70f2f6f..cc6aa69c58a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -121,8 +121,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.5/maven-2.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.5/maven-2.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom.package.json index 5c99b09c691..3cac95deece 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -238,8 +238,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom.package.json index 101507dbee2..adbc4aeed4a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -256,8 +256,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.7/maven-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.7/maven-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom.package.json index 45440d2cb1b..ebda319dd34 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -256,8 +256,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.8/maven-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0.8/maven-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0/maven-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0/maven-2.0.pom.package.json index 3dc44c586e3..4002dd1f812 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/maven/2.0/maven-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/maven/2.0/maven-2.0.pom.package.json @@ -95,10 +95,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven/maven@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -165,8 +165,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven/maven@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0/maven-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0/maven-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/maven/2.0/maven-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven/maven@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom.package.json index dcd1466f66a..30fd6ca57b7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-antrun-plugin@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,8 +66,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-antrun-plugin@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.1/maven-antrun-plugin-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-antrun-plugin@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom.package.json index c275e10e510..43f0bd03d00 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-assembly-plugin@2.2-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -229,8 +229,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-assembly-plugin@2.2-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2/maven-assembly-plugin-2.2-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-assembly-plugin@2.2-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom.package.json index de6f8bc610b..f46f2c344d1 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -102,8 +102,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.1/maven-checkstyle-plugin-2.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom.package.json index b5f719fe5c5..507b7e04f1a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -165,8 +165,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.2/maven-checkstyle-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-checkstyle-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom.package.json index 396953a93f5..749c9f83bed 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-clean-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -84,8 +84,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-clean-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.2/maven-clean-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-clean-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom.package.json index 39cfafebf5a..11127a14347 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-compiler-plugin@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-compiler-plugin@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-compiler-plugin@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom.package.json index c5461586c39..ad64387e022 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom.package.json @@ -53,10 +53,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-dependency-plugin@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -240,8 +240,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-dependency-plugin@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.0/maven-dependency-plugin-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-dependency-plugin@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom.package.json index ddd62841bdd..a6484c40f6d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-install-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-install-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-install-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom.package.json index 26b13c5df60..e00f0f74dd2 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-jar-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -111,8 +111,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-jar-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-jar-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom.package.json index ec3006f58fb..ef419f4fd17 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom.package.json @@ -88,10 +88,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-plugin-parent@2.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -140,8 +140,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-plugin-parent@2.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin-parent/2.0.1/maven-plugin-parent-2.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-plugin-parent@2.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom.package.json index 148127fa2c1..680628438d2 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-plugins@1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom.package.json index 13d44cbed95..729acd1efc6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-plugins@10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom.package.json index 29c4a50e1c9..03130de3a03 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-plugins@11?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@11", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/11/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/11/maven-plugins-11.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@11" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom.package.json index fdfef435cba..93cb15ae212 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-plugins@8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-plugins@8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom.package.json index 897bfa6358e..d2382d9c2ff 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-pmd-plugin@2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -129,8 +129,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-pmd-plugin@2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-pmd-plugin/2.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-pmd-plugin/2.3/maven-pmd-plugin-2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-pmd-plugin@2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom.package.json index 02c8e709aa0..554e2fe398c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-release-plugin@2.0-beta-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-release-plugin@2.0-beta-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0-beta-7/maven-release-plugin-2.0-beta-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-release-plugin@2.0-beta-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom.package.json index 53abf50de4e..9b6097dc6f0 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-resources-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-resources-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-resources-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom.package.json index cfd0952bdf1..93f2f98fd98 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom.package.json @@ -116,10 +116,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-site-plugin@2.0-beta-6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -285,8 +285,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-site-plugin@2.0-beta-6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-site-plugin/2.0-beta-6/maven-site-plugin-2.0-beta-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-site-plugin@2.0-beta-6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom.package.json index b0747027aeb..5958d523299 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-source-plugin@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-source-plugin@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-source-plugin/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-source-plugin/2.0.4/maven-source-plugin-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-source-plugin@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom.package.json index a52ddbf879d..67b3c5077ea 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-surefire-plugin@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -93,8 +93,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-surefire-plugin@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-surefire-plugin@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom.package.json index 5c35c208398..f8ab275ffba 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.plugins/maven-war-plugin@2.1-alpha-1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.plugins/maven-war-plugin@2.1-alpha-1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1-alpha-1/maven-war-plugin-2.1-alpha-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.plugins/maven-war-plugin@2.1-alpha-1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/release/maven-release/4/maven-release-4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/release/maven-release/4/maven-release-4.pom.package.json index 56902c9303b..45e3753dce5 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/release/maven-release/4/maven-release-4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/release/maven-release/4/maven-release-4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.release/maven-release@4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.release/maven-release@4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/release/maven-release/4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/release/maven-release/4/maven-release-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/release/maven-release/4/maven-release-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/release/maven-release/4/maven-release-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.release/maven-release@4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom.package.json index d2dee707643..7350b32d591 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.4/maven-reporting-api-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom.package.json index 7852dfdde5d..b414e1df85a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom.package.json index 61829db4604..8a370328c42 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0.8/maven-reporting-api-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom.package.json index bed223d0fb9..9e8a4d31866 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-api/2.0/maven-reporting-api-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom.package.json index 287d68fa01b..b9d169eb816 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -102,8 +102,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0.4/maven-reporting-impl-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom.package.json index 5dd12e2f5e5..68412697979 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -93,8 +93,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom.package.json index 76f2b3d4888..2557e2200c9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.4/maven-reporting-2.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom.package.json index 226f760c1ac..97e4e3f8904 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.6/maven-reporting-2.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom.package.json index a831e05c94c..a5fa6b96a43 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0.8/maven-reporting-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom.package.json index 15335b51a56..1fd46f00354 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/reporting/maven-reporting/2.0/maven-reporting-2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting@2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom.package.json index ab05e723373..e776044e8b4 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-api@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-api@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-api/1.0-beta-3/maven-scm-api-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-api@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom.package.json index d9069628a19..0d96ca878d1 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-manager-plexus@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-manager-plexus@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-manager-plexus/1.0-beta-3/maven-scm-manager-plexus-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-manager-plexus@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom.package.json index 941b21a1661..1ec6a32743b 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-managers@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-managers@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-managers/1.0-beta-3/maven-scm-managers-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-managers@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom.package.json index 95a0fcb77c1..7c60dde2c6c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-clearcase@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-clearcase@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-clearcase/1.0-beta-3/maven-scm-provider-clearcase-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-clearcase@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom.package.json index 2657648064b..fe5c8eadcc1 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvs-commons@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvs-commons@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.0-beta-3/maven-scm-provider-cvs-commons-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvs-commons@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom.package.json index 7ec0c1d65fc..cf989194c43 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvsexe@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvsexe@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-cvsexe/1.0-beta-3/maven-scm-provider-cvsexe-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-cvsexe@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom.package.json index fc1d373ac5a..f4d8499aa6d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-perforce@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-perforce@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-perforce/1.0-beta-3/maven-scm-provider-perforce-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-perforce@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom.package.json index 675388739db..c68119ff9c0 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-starteam@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-starteam@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-starteam/1.0-beta-3/maven-scm-provider-starteam-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-starteam@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom.package.json index 569ae286063..8d5a1d8a871 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-svn-commons@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-svn-commons@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svn-commons/1.0-beta-3/maven-scm-provider-svn-commons-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-svn-commons@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom.package.json index aba4c8ce0bb..ae089d4cec8 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-provider-svnexe@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-svnexe@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-provider-svnexe/1.0-beta-3/maven-scm-provider-svnexe-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-provider-svnexe@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom.package.json index 61cf1b07049..aa9fac925aa 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-providers-cvs@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers-cvs@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-cvs/1.0-beta-3/maven-scm-providers-cvs-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers-cvs@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom.package.json index 38069eeec04..0c0e6fa8a94 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-providers-svn@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers-svn@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers-svn/1.0-beta-3/maven-scm-providers-svn-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers-svn@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom.package.json index 7a6ae1813f6..0bcf9883ed7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm-providers@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm-providers/1.0-beta-3/maven-scm-providers-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm-providers@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom.package.json index 19a6283e917..1bcea40a8ac 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.scm/maven-scm@1.0-beta-3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.scm/maven-scm@1.0-beta-3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm/1.0-beta-3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/scm/maven-scm/1.0-beta-3/maven-scm-1.0-beta-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.scm/maven-scm@1.0-beta-3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom.package.json index f90c7db3a4e..103c42d6d6a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/file-management@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -84,8 +84,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/file-management@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.1/file-management-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.1/file-management-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/file-management@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom.package.json index dbb70c17938..589c4f3a1fc 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/file-management@1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -84,8 +84,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/file-management@1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2/file-management-1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2/file-management-1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/file-management@1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom.package.json index 82b4b8d8e26..de7bdc3186f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0-alpha-1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0-alpha-1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0-alpha-1/maven-common-artifact-filters-1.0-alpha-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0-alpha-1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom.package.json index a989504bfff..1a8900a4b0a 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/1.0/maven-common-artifact-filters-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-common-artifact-filters@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom.package.json index ca599de6136..54293b512d0 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-dependency-analyzer@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -103,8 +103,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-dependency-analyzer@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-analyzer/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-analyzer/1.0/maven-dependency-analyzer-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-dependency-analyzer@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom.package.json index dea7a4cfcb0..c11e5de17ea 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-dependency-tree@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-dependency-tree@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-tree/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-dependency-tree/1.1/maven-dependency-tree-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-dependency-tree@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom.package.json index 89553535e98..723308d8eef 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-osgi@0.2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-osgi@0.2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-osgi/0.2.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-osgi/0.2.0/maven-osgi-0.2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-osgi@0.2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom.package.json index 6f80c4307c3..1fa8e99afc9 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-plugin-testing-harness@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-plugin-testing-harness@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-plugin-testing-harness/1.1/maven-plugin-testing-harness-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-plugin-testing-harness@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom.package.json index 9ad97646289..05037f061c3 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-repository-builder@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-repository-builder@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-repository-builder/1.0-alpha-2/maven-repository-builder-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-repository-builder@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom.package.json index 2eedb07d6b5..78c55d16e4f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-components@3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/3/maven-shared-components-3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom.package.json index e1bc71117a7..6f90914061f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-components@4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/4/maven-shared-components-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom.package.json index f31f3d58800..0011777678c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-components@6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/6/maven-shared-components-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom.package.json index eba06ddcce4..509e229bed7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-components@7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/7/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/7/maven-shared-components-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom.package.json index 224138b489a..b675649bc1e 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-components@8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/8/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-components/8/maven-shared-components-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-components@8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom.package.json index 63b450ef79c..3c1b35b488e 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-io@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -102,8 +102,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-io@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.0/maven-shared-io-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-io@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom.package.json index 5741db68f53..191cddcffe8 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.shared/maven-shared-io@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -102,8 +102,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.shared/maven-shared-io@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.shared/maven-shared-io@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom.package.json index 038a5be8e34..3338d10548d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.surefire/surefire-api@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.surefire/surefire-api@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.2/surefire-api-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.surefire/surefire-api@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom.package.json index cb0051fe1a8..161aec9c3c7 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.surefire/surefire-booter@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.surefire/surefire-booter@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.2/surefire-booter-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.surefire/surefire-booter@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom.package.json index 257af1555d5..e1d4ca9c9bf 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.surefire/surefire-providers@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.surefire/surefire-providers@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.2/surefire-providers-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.surefire/surefire-providers@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom.package.json index 642cffe65ab..c0ce2087a80 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.surefire/surefire-testng@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.surefire/surefire-testng@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-testng/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-testng/2.4.2/surefire-testng-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.surefire/surefire-testng@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom.package.json index 19b881ea218..836783da1b6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom.package.json @@ -39,10 +39,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.surefire/surefire@2.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.surefire/surefire@2.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.surefire/surefire@2.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom.package.json index 76c97cf687d..e94e61316bf 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-alpha-5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -121,8 +121,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-alpha-5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-alpha-5/wagon-file-1.0-alpha-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-alpha-5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom.package.json index 7e9499f2151..db01311922e 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-file@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom.package.json index c4f16bdf942..a73e5ea11e6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-alpha-5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -148,8 +148,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-alpha-5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-alpha-5/wagon-http-lightweight-1.0-alpha-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-alpha-5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom.package.json index 04ae45ee257..ff128fc344d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-lightweight@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom.package.json index 5ba8cf7ba97..3e5c0686ffc 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-http-shared@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-shared@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-http-shared@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom.package.json index 622508a2362..453240ba0aa 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom.package.json index 87e0e29028b..9d22f3c854f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-6/wagon-provider-api-1.0-alpha-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-alpha-6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.package.json index e00772f51a5..a0eb5f48265 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-provider-api@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom.package.json index d9f82623484..9816a7d7d4b 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-providers@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-providers@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-beta-2/wagon-providers-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-providers@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom.package.json index be5c966dbad..9ed82d4a6b6 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-ssh-common@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh-common@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-common/1.0-beta-2/wagon-ssh-common-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh-common@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom.package.json index 7433b69b819..72312bca6be 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-ssh-external@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh-external@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh-external/1.0-beta-2/wagon-ssh-external-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh-external@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom.package.json index 9dbbbdcbd3e..52a0eef2d4c 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-alpha-5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -148,8 +148,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-alpha-5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-alpha-5/wagon-ssh-1.0-alpha-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-alpha-5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom.package.json index 2879d682773..67a68a0751f 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/1.0-beta-2/wagon-ssh-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon-ssh@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom.package.json index 0b0707a5127..40eaec53d5d 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon@1.0-alpha-6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -121,8 +121,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon@1.0-alpha-6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-alpha-6/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon@1.0-alpha-6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.package.json index c431eb9ea62..382de0cb149 100644 --- a/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.maven.wagon/wagon@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -120,8 +120,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.maven.wagon/wagon@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.maven.wagon/wagon@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/mina/build/1.1.1/build-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/mina/build/1.1.1/build-1.1.1.pom.package.json index 6359f0ed729..de6ef66a453 100644 --- a/tests/packagedcode/data/m2/org/apache/mina/build/1.1.1/build-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/mina/build/1.1.1/build-1.1.1.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.mina/build@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -55,8 +55,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.mina/build@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/mina/build/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/mina/build/1.1.1/build-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/mina/build/1.1.1/build-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/mina/build/1.1.1/build-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.mina/build@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom.package.json index d735322546c..6b9d67ccc7f 100644 --- a/tests/packagedcode/data/m2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.mina/mina-core@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.mina/mina-core@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/mina/mina-core/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/mina/mina-core/1.1.1/mina-core-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.mina/mina-core@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom.package.json index 6c703faa4a1..fa337886303 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.core/myfaces-api@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.myfaces.core/myfaces-api@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-api/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-api/1.1.5/myfaces-api-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.core/myfaces-api@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom.package.json index 1c69f9d5d46..00f29252efb 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.core/myfaces-core-project@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.myfaces.core/myfaces-core-project@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-core-project/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-core-project/1.1.5/myfaces-core-project-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.core/myfaces-core-project@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom.package.json index 9aab378d0f9..50a263d00ea 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.core/myfaces-impl@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.myfaces.core/myfaces-impl@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-impl/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/core/myfaces-impl/1.1.5/myfaces-impl-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.core/myfaces-impl@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom.package.json index 3e6d43a146f..9e4c532b22e 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom.package.json @@ -298,10 +298,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.maven/myfaces-master@1.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -314,8 +314,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.myfaces.maven/myfaces-master@1.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/maven/myfaces-master/1.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/maven/myfaces-master/1.0.5/myfaces-master-1.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.maven/myfaces-master@1.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom.package.json index d8bf72c7b36..e02586b1e72 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.tomahawk/tomahawk-project@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.myfaces.tomahawk/tomahawk-project@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk-project/1.1.5/tomahawk-project-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.tomahawk/tomahawk-project@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom.package.json index a48074aab8a..3566292f113 100644 --- a/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.myfaces.tomahawk/tomahawk@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -247,8 +247,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.myfaces.tomahawk/tomahawk@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/myfaces/tomahawk/tomahawk/1.1.5/tomahawk-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.myfaces.tomahawk/tomahawk@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/shale/shale-master/2/shale-master-2.pom.package.json b/tests/packagedcode/data/m2/org/apache/shale/shale-master/2/shale-master-2.pom.package.json index 4f15970aec5..5cefdd3b944 100644 --- a/tests/packagedcode/data/m2/org/apache/shale/shale-master/2/shale-master-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/shale/shale-master/2/shale-master-2.pom.package.json @@ -312,14 +312,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.shale/shale-master@2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.apache.shale/shale-master@2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-master/2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-master/2/shale-master-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-master/2/shale-master-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-master/2/shale-master-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.shale/shale-master@2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom.package.json index c0777876b16..f5731d26ace 100644 --- a/tests/packagedcode/data/m2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.shale/shale-parent@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -157,8 +157,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.shale/shale-parent@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-parent/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-parent/1.0.4/shale-parent-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.shale/shale-parent@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom.package.json b/tests/packagedcode/data/m2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom.package.json index 289779a2d8b..f92d5cc1a4f 100644 --- a/tests/packagedcode/data/m2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.shale/shale-test@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.shale/shale-test@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-test/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/shale/shale-test/1.0.4/shale-test-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.shale/shale-test@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/apache/velocity/velocity/1.5/velocity-1.5.pom.package.json b/tests/packagedcode/data/m2/org/apache/velocity/velocity/1.5/velocity-1.5.pom.package.json index 8ab4feaacb7..7d021883cf1 100644 --- a/tests/packagedcode/data/m2/org/apache/velocity/velocity/1.5/velocity-1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/apache/velocity/velocity/1.5/velocity-1.5.pom.package.json @@ -74,10 +74,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.velocity/velocity@1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -162,8 +162,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.velocity/velocity@1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/velocity/velocity/1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/velocity/velocity/1.5/velocity-1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/velocity/velocity/1.5/velocity-1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/velocity/velocity/1.5/velocity-1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.velocity/velocity@1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json index 8131378be1d..ae2f74136b4 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjrt@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjrt@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjrt@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom.package.json index 1f99d9cf84f..8ed07912fb0 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjrt@1.6.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjrt@1.6.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.6.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjrt/1.6.0/aspectjrt-1.6.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjrt@1.6.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json index 367ca694fe9..1cad23d1734 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjtools@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjtools@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.5.4/aspectjtools-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjtools@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom.package.json index c684348caf2..52e6ca85cff 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjtools@1.6.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjtools@1.6.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.6.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.6.0/aspectjtools-1.6.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjtools@1.6.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json index d322be99266..f1b4a727a7d 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjweaver@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjweaver@1.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.5.4/aspectjweaver-1.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjweaver@1.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom.package.json b/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom.package.json index fbc43365bfb..ac4aa45c0a5 100644 --- a/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.aspectj/aspectjweaver@1.6.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.aspectj/aspectjweaver@1.6.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.6.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.6.0/aspectjweaver-1.6.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.aspectj/aspectjweaver@1.6.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom.package.json b/tests/packagedcode/data/m2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom.package.json index 0a5bf2f9df0..beaeec022f4 100644 --- a/tests/packagedcode/data/m2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom.package.json +++ b/tests/packagedcode/data/m2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.bouncycastle/bcprov@1.37?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.bouncycastle/bcprov@1.37", "repository_homepage_url": "https://repo1.maven.org/maven2/org/bouncycastle/bcprov/1.37/", "repository_download_url": "https://repo1.maven.org/maven2/org/bouncycastle/bcprov/1.37/bcprov-1.37.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/bouncycastle/bcprov/1.37/bcprov-1.37.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.bouncycastle/bcprov@1.37" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-20090219.165735-19.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-20090219.165735-19.pom.package.json index d8d571373b0..340b413a3f3 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-20090219.165735-19.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-20090219.165735-19.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom.package.json index d8d571373b0..340b413a3f3 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions-maven2/1.0-SNAPSHOT/cargo-extensions-maven2-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions-maven2@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-20090219.165735-20.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-20090219.165735-20.pom.package.json index d5bf4c437e5..4a5a42c3e46 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-20090219.165735-20.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-20090219.165735-20.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom.package.json index d5bf4c437e5..4a5a42c3e46 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-extensions/1.0-SNAPSHOT/cargo-extensions-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-extensions@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-20090219.165735-19.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-20090219.165735-19.pom.package.json index 11da191b1c8..94eea51d6f7 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-20090219.165735-19.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-20090219.165735-19.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom.package.json index 11da191b1c8..94eea51d6f7 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-maven2-plugin/1.0-SNAPSHOT/cargo-maven2-plugin-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-maven2-plugin@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-20090219.165735-12.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-20090219.165735-12.pom.package.json index b3a1e1b5f59..799a139adfa 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-20090219.165735-12.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-20090219.165735-12.pom.package.json @@ -249,14 +249,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom.package.json index b3a1e1b5f59..799a139adfa 100644 --- a/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom.package.json @@ -249,14 +249,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/cargo/cargo-parent/4.2-SNAPSHOT/cargo-parent-4.2-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.cargo/cargo-parent@4.2-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom.package.json index 4a6a5e73216..1ef280dd4a1 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom.package.json @@ -46,10 +46,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/aspectj-maven-plugin@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -134,8 +134,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/aspectj-maven-plugin@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/aspectj-maven-plugin/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/aspectj-maven-plugin/1.0/aspectj-maven-plugin-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/aspectj-maven-plugin@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-20080813.143116-6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-20080813.143116-6.pom.package.json index ec4be8e8c62..5ccf384745f 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-20080813.143116-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-20080813.143116-6.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom.package.json index ec4be8e8c62..5ccf384745f 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/1.2-SNAPSHOT/build-helper-maven-plugin-1.2-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/build-helper-maven-plugin@1.2-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom.package.json index cc0ddc1560c..2a0f9a362bb 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom.package.json @@ -53,10 +53,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/cobertura-maven-plugin@2.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -177,8 +177,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/cobertura-maven-plugin@2.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/cobertura-maven-plugin/2.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/cobertura-maven-plugin/2.2/cobertura-maven-plugin-2.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/cobertura-maven-plugin@2.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json index 94a798c4b27..73a305acf57 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom.package.json index f0a3d8b065c..7f91461cb2f 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/maven-buildnumber-plugin@0.9.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -136,8 +136,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/maven-buildnumber-plugin@0.9.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/maven-buildnumber-plugin/0.9.6/maven-buildnumber-plugin-0.9.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/maven-buildnumber-plugin@0.9.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom.package.json index 0b90a7b28f9..2217e9b68df 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo-sandbox@2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.mojo/mojo-sandbox@2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-sandbox/2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-sandbox/2/mojo-sandbox-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo-sandbox@2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/11/mojo-11.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/11/mojo-11.pom.package.json index 5d671bfc5ba..8529256f619 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/11/mojo-11.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/11/mojo-11.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo@11?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/mojo@11", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/11/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/11/mojo-11.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/11/mojo-11.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/11/mojo-11.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo@11" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/12/mojo-12.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/12/mojo-12.pom.package.json index d439c813115..2631b10d585 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/12/mojo-12.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/12/mojo-12.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo@12?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/mojo@12", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/12/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/12/mojo-12.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/12/mojo-12.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/12/mojo-12.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo@12" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/14/mojo-14.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/14/mojo-14.pom.package.json index f816fa8680f..94ef5ee64ea 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/14/mojo-14.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/14/mojo-14.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo@14?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,8 +57,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/mojo@14", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/14/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/14/mojo-14.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/14/mojo-14.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/14/mojo-14.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo@14" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/16/mojo-16.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/16/mojo-16.pom.package.json index 01eef8050d5..2796fef9099 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/16/mojo-16.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/16/mojo-16.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo@16?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,8 +57,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/mojo@16", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/16/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/16/mojo-16.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/16/mojo-16.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/16/mojo-16.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo@16" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/17/mojo-17.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/17/mojo-17.pom.package.json index c64a18a129d..08c1f09f528 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/17/mojo-17.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/mojo/17/mojo-17.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/mojo@17?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,8 +57,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/mojo@17", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/17/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/17/mojo-17.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/17/mojo-17.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/mojo/17/mojo-17.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/mojo@17" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom.package.json index cb221909560..75847ae3f87 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/native-maven-plugin@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/native-maven-plugin@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/native-maven-plugin/1.0-alpha-2/native-maven-plugin-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/native-maven-plugin@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom.package.json index db991f3842d..004d228b7c8 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-api@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-api@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-api/1.0-alpha-2/maven-native-api-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-api@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom.package.json index 91d58615c12..40ec4026820 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-bcc@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-bcc@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-bcc/1.0-alpha-2/maven-native-bcc-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-bcc@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom.package.json index 01ca2614cbd..8996b90224a 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-components@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-components@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-components/1.0-alpha-2/maven-native-components-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-components@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom.package.json index 61113d4495c..26c3bd86a50 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-generic-c@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-generic-c@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-generic-c/1.0-alpha-2/maven-native-generic-c-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-generic-c@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom.package.json index 2405cc693ee..4e97d965e07 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-javah@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-javah@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-javah/1.0-alpha-2/maven-native-javah-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-javah@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom.package.json index 90e88006642..367cde507cf 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-manager@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-manager@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-manager/1.0-alpha-2/maven-native-manager-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-manager@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom.package.json index 9c5df9961ee..018ebb4ca1b 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native-msvc@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-msvc@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native-msvc/1.0-alpha-2/maven-native-msvc-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native-msvc@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom.package.json index 3bbd72bb8c7..9e9fa10ab36 100644 --- a/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo.natives/maven-native@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -129,8 +129,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/natives/maven-native/1.0-alpha-2/maven-native-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo.natives/maven-native@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom.package.json index 8977989672f..4f1c1516057 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-active-collections@1.0-beta-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-active-collections@1.0-beta-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-active-collections/1.0-beta-2/plexus-active-collections-1.0-beta-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-active-collections@1.0-beta-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom.package.json index 0c2798396d3..e8ed6f3f387 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom.package.json @@ -39,10 +39,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-10/plexus-archiver-1.0-alpha-10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom.package.json index 79306c511a6..05891e0beec 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-5/plexus-archiver-1.0-alpha-5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom.package.json index 842fb3b63c9..d60737fce1f 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom.package.json @@ -39,10 +39,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -55,8 +55,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom.package.json index eb38004d9a0..3033d70bb2e 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom.package.json @@ -39,10 +39,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-archiver@1.0-alpha-9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom.package.json index eb6144dbe21..f21db4708d5 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-classworlds@1.2-alpha-6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-classworlds@1.2-alpha-6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-classworlds@1.2-alpha-6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom.package.json index 6240875cc87..1b25af7924e 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,8 +152,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.1/plexus-compiler-api-1.5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom.package.json index 3011d234485..387d7d129e4 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-api@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom.package.json index bf1a3e723e4..fd0bee55808 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compiler-javac@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-javac@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-javac@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom.package.json index 72a2398586a..bcb89dee97e 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compiler-manager@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-manager@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler-manager@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom.package.json index 199e922f75e..fa0e432e810 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compiler@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compiler@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom.package.json index 6879a71ac24..20766fa1b31 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-compilers@1.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,8 +152,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-compilers@1.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-compilers@1.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom.package.json index 15fe56a950a..7c5cc8d55d2 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-15", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-15" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.package.json index f5b7463f94e..8901e270ae2 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-16?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-16", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-component-api@1.0-alpha-16" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom.package.json index 05787ced976..c22d6204b2c 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.12?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.12", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.12/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.12/plexus-components-1.1.12.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.12" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom.package.json index f392610de79..2ff2e02bfb4 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.4/plexus-components-1.1.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom.package.json index 9ad224c3ef3..0f796e64d77 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.5/plexus-components-1.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.package.json index a280af827e6..2350e71e92a 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom.package.json index c36604197e1..52fd4a80d6f 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom.package.json index 58cd9528474..e64dc37aa25 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-components@1.1.9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-components@1.1.9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom.package.json index 567da931a15..af2929052f6 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-15", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-15" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom.package.json index 044ac0ef347..bd9e272f2f5 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-22?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-22", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-22/plexus-container-default-1.0-alpha-22.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-22" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom.package.json index 0151efedf20..3c1b3a33426 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-30?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-30", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-30" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom.package.json index 6a72da5664a..1beeb6eef4c 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-7/plexus-container-default-1.0-alpha-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom.package.json index 7c4a0895834..8bd4c172221 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -143,8 +143,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom.package.json index 36de3fcc35c..c6323c060bd 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9-stable-1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9-stable-1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9-stable-1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom.package.json index 7d20f5b4221..5c5063b0ac1 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom.package.json index ab9adeabe44..931bf4a454a 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-15", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-15" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.package.json index 75e784f4197..7850c9888bd 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-16?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-16", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-16" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom.package.json index 47fe49c0aa8..e53ddebd166 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-22?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-22", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-22/plexus-containers-1.0-alpha-22.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-22" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom.package.json index 76017e449fb..e920cecef94 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-30?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,8 +67,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-30", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-30/plexus-containers-1.0-alpha-30.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0-alpha-30" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom.package.json index 1b6b5803168..6548eec7384 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-containers@1.0.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-containers@1.0.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom.package.json index e904eb21657..306d8a179d1 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-digest@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-digest@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-digest@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom.package.json index 67855cb21c7..494ab7fd490 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-6/plexus-i18n-1.0-beta-6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom.package.json index 8f4285956fd..e2540cb3377 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-i18n@1.0-beta-7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json index f46d0905c0b..13b61ec9cca 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,8 +152,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom.package.json index 7a558dbc8fa..6758d658acd 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom.package.json index f17cace4f29..2df6d8f151d 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-2/plexus-io-1.0-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-io@1.0-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom.package.json index de131d432c0..d2cfaa79d3e 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -125,8 +125,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom.package.json index ed64115f19b..92d9c2d02b8 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.package.json index d1f9f84b05a..39203bcb4a9 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom.package.json index 98240b6f257..ef8b20fe405 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom.package.json index 030a27f8244..4c9867192d3 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.3/plexus-utils-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom.package.json index 1b1d9e5dd1f..50c1d18a325 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.1/plexus-utils-1.4.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom.package.json index ac78df948e0..bfad94f9291 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.2/plexus-utils-1.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.package.json index 8b87d4f8e5d..96c5b28c2fa 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom.package.json index 77f56524f6d..e098d97b824 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.6", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.6/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.6/plexus-utils-1.4.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom.package.json index 11ec2b06345..846fecd439c 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.7/plexus-utils-1.4.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom.package.json index 93a85246dbb..d6bed793ab6 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.4.9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom.package.json index e8ea5d631ec..f298fcca699 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-utils@1.5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-utils@1.5.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom.package.json index a84fe16d97a..c1fff56c729 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -179,8 +179,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.2/plexus-velocity-1.1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom.package.json index 4b6cbdc688f..f784a42fd31 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.3/plexus-velocity-1.1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom.package.json index 2f8011e9db6..2a5deaa5be6 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-velocity@1.1.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.package.json index 2fcbc6d1a61..e6571505169 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.package.json @@ -158,10 +158,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.10?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -174,8 +174,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.10", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.10" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.package.json index 46acea55d31..b6428e52b34 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.package.json @@ -165,10 +165,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.11?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -181,8 +181,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.11", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.11/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.11" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.package.json index 62ea59d226e..df3361ff182 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -125,8 +125,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom.package.json index f7d25a1e33e..52cc7339570 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -125,8 +125,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.5/plexus-1.0.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.package.json index 3c73204373e..43abbe20da4 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.package.json @@ -130,10 +130,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -146,8 +146,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.package.json b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.package.json index eb730b864a9..586cf600869 100644 --- a/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.package.json +++ b/tests/packagedcode/data/m2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.package.json @@ -137,10 +137,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus@1.0.9?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -153,8 +153,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.9", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus@1.0.9" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/easymock/easymock/2.3/easymock-2.3.pom.package.json b/tests/packagedcode/data/m2/org/easymock/easymock/2.3/easymock-2.3.pom.package.json index 254ed492bbc..08e53599d99 100644 --- a/tests/packagedcode/data/m2/org/easymock/easymock/2.3/easymock-2.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/easymock/easymock/2.3/easymock-2.3.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.easymock/easymock@2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -47,8 +47,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.easymock/easymock@2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/easymock/easymock/2.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/easymock/easymock/2.3/easymock-2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/easymock/easymock/2.3/easymock-2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/easymock/easymock/2.3/easymock-2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.easymock/easymock@2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom.package.json b/tests/packagedcode/data/m2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom.package.json index f97d181cd5b..5aba3dc7e09 100644 --- a/tests/packagedcode/data/m2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.easymock/easymockclassextension@2.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -74,8 +74,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.easymock/easymockclassextension@2.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/easymock/easymockclassextension/2.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/easymock/easymockclassextension/2.3/easymockclassextension-2.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.easymock/easymockclassextension@2.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom.package.json index 33ced87be9d..eb31c36ffea 100644 --- a/tests/packagedcode/data/m2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/ejb3-persistence@1.0.1.GA?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.hibernate/ejb3-persistence@1.0.1.GA", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/ejb3-persistence/1.0.1.GA/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/ejb3-persistence/1.0.1.GA/ejb3-persistence-1.0.1.GA.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/ejb3-persistence@1.0.1.GA" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom.package.json index 5c15b366d66..a095dfc2184 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate-annotations@3.2.1.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -65,8 +65,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate-annotations@3.2.1.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.2.1.ga/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.2.1.ga/hibernate-annotations-3.2.1.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate-annotations@3.2.1.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom.package.json index d7066e23a60..122b8c37584 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate-annotations@3.3.1.GA?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -74,8 +74,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate-annotations@3.3.1.GA", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.3.1.GA/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-annotations/3.3.1.GA/hibernate-annotations-3.3.1.GA.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate-annotations@3.3.1.GA" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom.package.json index 7c3bad16036..7ae5a236e4c 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate-commons-annotations@3.0.0.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -56,8 +56,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate-commons-annotations@3.0.0.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate-commons-annotations@3.0.0.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom.package.json index 82cb4582058..5e7a87b3867 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate-entitymanager@3.2.1.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -65,8 +65,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.2.1.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.2.1.ga/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.2.1.ga/hibernate-entitymanager-3.2.1.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.2.1.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom.package.json index e65aaec1661..fa57793aa51 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.GA?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -92,8 +92,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.GA", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.3.2.GA/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate-entitymanager/3.3.2.GA/hibernate-entitymanager-3.3.2.GA.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.GA" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom.package.json index 297f93d25d7..0e2d34fec85 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate@3.2.1.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -199,8 +199,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate@3.2.1.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.1.ga/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate@3.2.1.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom.package.json b/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom.package.json index 20eade3ac64..646bd86700e 100644 --- a/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom.package.json +++ b/tests/packagedcode/data/m2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.hibernate/hibernate@3.2.6.ga?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -199,8 +199,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.hibernate/hibernate@3.2.6.ga", "repository_homepage_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.6.ga/", "repository_download_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.hibernate/hibernate@3.2.6.ga" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom.package.json index bb8deba9c88..c2589d07e18 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom.package.json @@ -116,14 +116,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/jetty-parent@7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.mortbay.jetty/jetty-parent@7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-parent/7/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-parent/7/jetty-parent-7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/jetty-parent@7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom.package.json index 273523f6a01..4456b1144e4 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/jetty-util@6.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/jetty-util@6.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util/6.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util/6.1.5/jetty-util-6.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/jetty-util@6.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom.package.json index bf8f3b9bf4b..ca2a31a51e8 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/jetty@6.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/jetty@6.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty/6.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/jetty/6.1.5/jetty-6.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/jetty@6.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-20090123.170629-84.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-20090123.170629-84.pom.package.json index 3655d0cbbcd..1eed2956d4f 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-20090123.170629-84.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-20090123.170629-84.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -138,8 +138,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom.package.json index 3655d0cbbcd..1eed2956d4f 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -138,8 +138,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/maven-jetty-plugin/6.1-SNAPSHOT/maven-jetty-plugin-6.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/maven-jetty-plugin@6.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-20090123.170629-92.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-20090123.170629-92.pom.package.json index fad6c77ce73..bb1c18b5fe3 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-20090123.170629-92.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-20090123.170629-92.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -103,8 +103,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom.package.json index fad6c77ce73..bb1c18b5fe3 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -103,8 +103,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1-SNAPSHOT/project-6.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/project@6.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom.package.json index 1143e0a8e9d..4b291382f1a 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom.package.json @@ -95,10 +95,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/project@6.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -201,8 +201,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.mortbay.jetty/project@6.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1.5/project-6.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/project/6.1.5/project-6.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/project@6.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom.package.json b/tests/packagedcode/data/m2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom.package.json index c7aae50acc8..3c235f4414a 100644 --- a/tests/packagedcode/data/m2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.mortbay.jetty/servlet-api-2.5@6.1.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.mortbay.jetty/servlet-api-2.5@6.1.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5/6.1.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/mortbay/jetty/servlet-api-2.5/6.1.5/servlet-api-2.5-6.1.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.mortbay.jetty/servlet-api-2.5@6.1.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom.package.json index 3f70e9bd666..c792b2b5147 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.client-drivers/selenium-client-drivers@0.9.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.client-drivers/selenium-client-drivers@0.9.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-client-drivers/0.9.2/selenium-client-drivers-0.9.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.client-drivers/selenium-client-drivers@0.9.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom.package.json index 3e5fa48d012..0fb206c70ea 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.client-drivers/selenium-java-client-driver@0.9.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.client-drivers/selenium-java-client-driver@0.9.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/client-drivers/selenium-java-client-driver/0.9.2/selenium-java-client-driver-0.9.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.client-drivers/selenium-java-client-driver@0.9.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom.package.json index 4f7bb5c5a76..707628a9e59 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.core/selenium-core@0.8.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.core/selenium-core@0.8.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/core/selenium-core/0.8.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/core/selenium-core/0.8.3/selenium-core-0.8.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.core/selenium-core@0.8.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom.package.json index a1f813ad0e6..8c08d0e3660 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium/selenium-rc@0.9.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -121,8 +121,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium/selenium-rc@0.9.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.1/selenium-rc-0.9.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium/selenium-rc@0.9.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom.package.json index a1623bd0e32..3ff1bd4171f 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium/selenium-rc@0.9.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium/selenium-rc@0.9.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/selenium-rc/0.9.2/selenium-rc-0.9.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium/selenium-rc@0.9.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom.package.json index 968bba63458..214e7d80815 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.1/selenium-server-coreless-0.9.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom.package.json index 096d0ef02eb..e3f1a5787c8 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,8 +85,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server-coreless/0.9.2/selenium-server-coreless-0.9.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.server/selenium-server-coreless@0.9.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom.package.json b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom.package.json index 0208983a37d..985ed326e17 100644 --- a/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.openqa.selenium.server/selenium-server@0.9.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.openqa.selenium.server/selenium-server@0.9.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server/0.9.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/openqa/selenium/server/selenium-server/0.9.2/selenium-server-0.9.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.openqa.selenium.server/selenium-server@0.9.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom.package.json b/tests/packagedcode/data/m2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom.package.json index f814f547ce5..702002a1138 100644 --- a/tests/packagedcode/data/m2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.slf4j/slf4j-api@1.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.slf4j/slf4j-api@1.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.4.2/slf4j-api-1.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.slf4j/slf4j-api@1.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom.package.json b/tests/packagedcode/data/m2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom.package.json index 702cded61fa..c5878330eb0 100644 --- a/tests/packagedcode/data/m2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.slf4j/slf4j-log4j12@1.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.slf4j/slf4j-log4j12@1.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.4.2/slf4j-log4j12-1.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.slf4j/slf4j-log4j12@1.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom.package.json b/tests/packagedcode/data/m2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom.package.json index e50d311b08e..4cd88901a1b 100644 --- a/tests/packagedcode/data/m2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom.package.json +++ b/tests/packagedcode/data/m2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.slf4j/slf4j-parent@1.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,8 +66,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.slf4j/slf4j-parent@1.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.4.2/slf4j-parent-1.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.slf4j/slf4j-parent@1.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom.package.json index ae12442b519..94575b53cd3 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-aop@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -154,8 +154,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-aop@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-aop/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aop/2.5.3/spring-aop-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-aop@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom.package.json index 71bb753cdec..852f72b511c 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-aspects@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-aspects@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.3/spring-aspects-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-aspects@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom.package.json index 38b74d9e2bc..48bfd6ee470 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-aspects@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-aspects@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-aspects/2.5.4/spring-aspects-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-aspects@2.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom.package.json index a2f31f48f47..bbe45170c20 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-beans@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -73,8 +73,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-beans@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-beans/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-beans/2.5.3/spring-beans-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-beans@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom.package.json index ea066eab531..48a6e412773 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-context-support@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -262,8 +262,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-context-support@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-context-support/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-context-support/2.5.3/spring-context-support-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-context-support@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom.package.json index be3d1cd59df..1336dd3489f 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-context@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -145,8 +145,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-context@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-context/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-context/2.5.3/spring-context-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-context@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom.package.json index 618d0a639b9..074a6f85aff 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-core@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -109,8 +109,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-core@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-core/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-core/2.5.3/spring-core-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-core@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom.package.json index bd21896e6b5..2165cd95c53 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-jdbc@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -118,8 +118,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-jdbc@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-jdbc/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-jdbc/2.5.3/spring-jdbc-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-jdbc@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom.package.json index 23b59d94558..772ae6b7cab 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-orm@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-orm@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-orm@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom.package.json index 574d6aef2cb..9975f2ed68c 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-test@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-test@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.3/spring-test-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-test@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom.package.json index 3ed50d24dd2..86d54aa4f9e 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-test@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-test@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-test/2.5.4/spring-test-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-test@2.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom.package.json index 3af2d190fb9..0fba3033d65 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-tx@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -136,8 +136,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-tx@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-tx/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-tx/2.5.3/spring-tx-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-tx@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom.package.json index dd4dd8d5335..017f6896eb3 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-web@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -181,8 +181,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-web@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-web/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-web/2.5.3/spring-web-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-web@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom.package.json index c22828b117b..03352de8c00 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-webmvc@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -244,8 +244,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom.package.json index 8a59fece94d..58d318850b6 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-webmvc@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -244,8 +244,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.4/spring-webmvc-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/springframework/spring/2.5.4/spring-2.5.4.pom.package.json b/tests/packagedcode/data/m2/org/springframework/spring/2.5.4/spring-2.5.4.pom.package.json index efb6b8d0f8f..acf8c5bb3c7 100644 --- a/tests/packagedcode/data/m2/org/springframework/spring/2.5.4/spring-2.5.4.pom.package.json +++ b/tests/packagedcode/data/m2/org/springframework/spring/2.5.4/spring-2.5.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -631,8 +631,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring@2.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/testng/testng/5.7/testng-5.7.pom.package.json b/tests/packagedcode/data/m2/org/testng/testng/5.7/testng-5.7.pom.package.json index ccbc9dd7470..f4369cd92f2 100644 --- a/tests/packagedcode/data/m2/org/testng/testng/5.7/testng-5.7.pom.package.json +++ b/tests/packagedcode/data/m2/org/testng/testng/5.7/testng-5.7.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.testng/testng@5.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -74,8 +74,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.testng/testng@5.7", "repository_homepage_url": "https://repo1.maven.org/maven2/org/testng/testng/5.7/", "repository_download_url": "https://repo1.maven.org/maven2/org/testng/testng/5.7/testng-5.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/testng/testng/5.7/testng-5.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/testng/testng/5.7/testng-5.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.testng/testng@5.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/testng/testng/5.8/testng-5.8.pom.package.json b/tests/packagedcode/data/m2/org/testng/testng/5.8/testng-5.8.pom.package.json index dde25a65cd7..39e0f62b130 100644 --- a/tests/packagedcode/data/m2/org/testng/testng/5.8/testng-5.8.pom.package.json +++ b/tests/packagedcode/data/m2/org/testng/testng/5.8/testng-5.8.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.testng/testng@5.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -74,8 +74,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.testng/testng@5.8", "repository_homepage_url": "https://repo1.maven.org/maven2/org/testng/testng/5.8/", "repository_download_url": "https://repo1.maven.org/maven2/org/testng/testng/5.8/testng-5.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/testng/testng/5.8/testng-5.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/testng/testng/5.8/testng-5.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.testng/testng@5.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom.package.json b/tests/packagedcode/data/m2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom.package.json index 8a3c4fa59b2..405ce8edc9a 100644 --- a/tests/packagedcode/data/m2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom.package.json +++ b/tests/packagedcode/data/m2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.uncommons/reportng@0.9.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.uncommons/reportng@0.9.5", "repository_homepage_url": "https://repo1.maven.org/maven2/org/uncommons/reportng/0.9.5/", "repository_download_url": "https://repo1.maven.org/maven2/org/uncommons/reportng/0.9.5/reportng-0.9.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/uncommons/reportng/0.9.5/reportng-0.9.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.uncommons/reportng@0.9.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/oro/oro/2.0.7/oro-2.0.7.pom.package.json b/tests/packagedcode/data/m2/oro/oro/2.0.7/oro-2.0.7.pom.package.json index 888a35d0641..41600acd1ff 100644 --- a/tests/packagedcode/data/m2/oro/oro/2.0.7/oro-2.0.7.pom.package.json +++ b/tests/packagedcode/data/m2/oro/oro/2.0.7/oro-2.0.7.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/oro/oro@2.0.7?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/oro/oro@2.0.7", "repository_homepage_url": "https://repo1.maven.org/maven2/oro/oro/2.0.7/", "repository_download_url": "https://repo1.maven.org/maven2/oro/oro/2.0.7/oro-2.0.7.jar", - "api_data_url": "https://repo1.maven.org/maven2/oro/oro/2.0.7/oro-2.0.7.pom" + "api_data_url": "https://repo1.maven.org/maven2/oro/oro/2.0.7/oro-2.0.7.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/oro/oro@2.0.7" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/oro/oro/2.0.8/oro-2.0.8.pom.package.json b/tests/packagedcode/data/m2/oro/oro/2.0.8/oro-2.0.8.pom.package.json index 4d2c20b3127..30f5a22f39f 100644 --- a/tests/packagedcode/data/m2/oro/oro/2.0.8/oro-2.0.8.pom.package.json +++ b/tests/packagedcode/data/m2/oro/oro/2.0.8/oro-2.0.8.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/oro/oro@2.0.8?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/oro/oro@2.0.8", "repository_homepage_url": "https://repo1.maven.org/maven2/oro/oro/2.0.8/", "repository_download_url": "https://repo1.maven.org/maven2/oro/oro/2.0.8/oro-2.0.8.jar", - "api_data_url": "https://repo1.maven.org/maven2/oro/oro/2.0.8/oro-2.0.8.pom" + "api_data_url": "https://repo1.maven.org/maven2/oro/oro/2.0.8/oro-2.0.8.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/oro/oro@2.0.8" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/p6spy/p6spy/1.3/p6spy-1.3.pom.package.json b/tests/packagedcode/data/m2/p6spy/p6spy/1.3/p6spy-1.3.pom.package.json index a256b54e508..16ed3669414 100644 --- a/tests/packagedcode/data/m2/p6spy/p6spy/1.3/p6spy-1.3.pom.package.json +++ b/tests/packagedcode/data/m2/p6spy/p6spy/1.3/p6spy-1.3.pom.package.json @@ -67,10 +67,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/p6spy/p6spy@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -128,8 +128,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/p6spy/p6spy@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/p6spy/p6spy/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/p6spy/p6spy/1.3/p6spy-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/p6spy/p6spy/1.3/p6spy-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/p6spy/p6spy/1.3/p6spy-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/p6spy/p6spy@1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.7.0.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.7.0.pom.package.json index 1c6ca2167d6..bcc2dc96e38 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.7.0.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.7.0.pom.package.json @@ -26,10 +26,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -132,8 +132,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?type=war", "repository_homepage_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/", "repository_download_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.war", - "api_data_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?type=war" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.8.0.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.8.0.pom.package.json index 1c6ca2167d6..bcc2dc96e38 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.8.0.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/argus-webservices-2.8.0.pom.package.json @@ -26,10 +26,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -132,8 +132,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?type=war", "repository_homepage_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/", "repository_download_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.war", - "api_data_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/salesforce/argus/argus-webservices/${project.version}/argus-webservices-${project.version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.salesforce.argus/argus-webservices@%24%7Bproject.version%7D?type=war" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/coreplugin-1.0.0.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/coreplugin-1.0.0.pom.package.json index dc653b5bcc6..d6550248a4a 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/coreplugin-1.0.0.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/coreplugin-1.0.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/net.sourceforge.findbugs/coreplugin@1.0.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/net.sourceforge.findbugs/coreplugin@1.0.0", "repository_homepage_url": "https://repo1.maven.org/maven2/net/sourceforge/findbugs/coreplugin/1.0.0/", "repository_download_url": "https://repo1.maven.org/maven2/net/sourceforge/findbugs/coreplugin/1.0.0/coreplugin-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/net/sourceforge/findbugs/coreplugin/1.0.0/coreplugin-1.0.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/net/sourceforge/findbugs/coreplugin/1.0.0/coreplugin-1.0.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/net.sourceforge.findbugs/coreplugin@1.0.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-annotations-0.2.1.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-annotations-0.2.1.pom.package.json index 81eeb6bdefa..639d1b527ed 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-annotations-0.2.1.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-annotations-0.2.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.github.albertoanguita/jacuzzi-annotations@%24%7Bversion%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/com.github.albertoanguita/jacuzzi-annotations@%24%7Bversion%7D", "repository_homepage_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-annotations/${version}/", "repository_download_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-annotations/${version}/jacuzzi-annotations-${version}.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-annotations/${version}/jacuzzi-annotations-${version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-annotations/${version}/jacuzzi-annotations-${version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.github.albertoanguita/jacuzzi-annotations@%24%7Bversion%7D" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-database-0.2.1.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-database-0.2.1.pom.package.json index f4f3a5d3a05..e814e4e3e81 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-database-0.2.1.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/jacuzzi-database-0.2.1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.github.albertoanguita/jacuzzi-database@%24%7Bversion%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.github.albertoanguita/jacuzzi-database@%24%7Bversion%7D", "repository_homepage_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-database/${version}/", "repository_download_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-database/${version}/jacuzzi-database-${version}.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-database/${version}/jacuzzi-database-${version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/github/albertoanguita/jacuzzi-database/${version}/jacuzzi-database-${version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.github.albertoanguita/jacuzzi-database@%24%7Bversion%7D" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/ojcms-beans-0.1-beta.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/ojcms-beans-0.1-beta.pom.package.json index 60c34ca7783..ed0c829315c 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/ojcms-beans-0.1-beta.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/ojcms-beans-0.1-beta.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.github.simondan.ojcms/ojcms-beans@%24%7Bproject.version%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.github.simondan.ojcms/ojcms-beans@%24%7Bproject.version%7D", "repository_homepage_url": "https://repo1.maven.org/maven2/com/github/simondan/ojcms/ojcms-beans/${project.version}/", "repository_download_url": "https://repo1.maven.org/maven2/com/github/simondan/ojcms/ojcms-beans/${project.version}/ojcms-beans-${project.version}.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/github/simondan/ojcms/ojcms-beans/${project.version}/ojcms-beans-${project.version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/github/simondan/ojcms/ojcms-beans/${project.version}/ojcms-beans-${project.version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.github.simondan.ojcms/ojcms-beans@%24%7Bproject.version%7D" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/pkg-2.0.13.1005.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/pkg-2.0.13.1005.pom.package.json index 067e49e5e4c..9c0999b94d0 100644 --- a/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/pkg-2.0.13.1005.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/inifinite_loop/pkg-2.0.13.1005.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.jvnet.updatecenter2/pkg@%24%7Bversion%7D?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.jvnet.updatecenter2/pkg@%24%7Bversion%7D", "repository_homepage_url": "https://repo1.maven.org/maven2/org/jvnet/updatecenter2/pkg/${version}/", "repository_download_url": "https://repo1.maven.org/maven2/org/jvnet/updatecenter2/pkg/${version}/pkg-${version}.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/updatecenter2/pkg/${version}/pkg-${version}.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/updatecenter2/pkg/${version}/pkg-${version}.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.jvnet.updatecenter2/pkg@%24%7Bversion%7D" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-2.17.0718b.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-2.17.0718b.pom.package.json index 7c060275815..f70170ed919 100644 --- a/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-2.17.0718b.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-2.17.0718b.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/io.github.subiyacryolite/jds@2.17.0718b?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/io.github.subiyacryolite/jds@2.17.0718b", "repository_homepage_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/2.17.0718b/", "repository_download_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/2.17.0718b/jds-2.17.0718b.jar", - "api_data_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/2.17.0718b/jds-2.17.0718b.pom" + "api_data_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/2.17.0718b/jds-2.17.0718b.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/io.github.subiyacryolite/jds@2.17.0718b" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-3.0.1.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-3.0.1.pom.package.json index c80a52d6c0b..cb40981af77 100644 --- a/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-3.0.1.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/parse_error/jds-3.0.1.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/io.github.subiyacryolite/jds@3.0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,8 +91,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/io.github.subiyacryolite/jds@3.0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/3.0.1/", "repository_download_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/3.0.1/jds-3.0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/3.0.1/jds-3.0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/io/github/subiyacryolite/jds/3.0.1/jds-3.0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/io.github.subiyacryolite/jds@3.0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/parse_error/maven-javanet-plugin-1.7.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/parse_error/maven-javanet-plugin-1.7.pom.package.json index 4bf2db90830..0366b3182fa 100644 --- a/tests/packagedcode/data/m2/parsing_issues/parse_error/maven-javanet-plugin-1.7.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/parse_error/maven-javanet-plugin-1.7.pom.package.json @@ -46,8 +46,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -114,8 +114,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/maven-javanet-plugin/maven-javanet-plugin", "repository_homepage_url": "https://repo1.maven.org/maven2/maven-javanet-plugin/maven-javanet-plugin/None/", "repository_download_url": "https://repo1.maven.org/maven2/maven-javanet-plugin/maven-javanet-plugin/None/maven-javanet-plugin-None.jar", - "api_data_url": "https://repo1.maven.org/maven2/maven-javanet-plugin/maven-javanet-plugin/None/maven-javanet-plugin-None.pom" + "api_data_url": "https://repo1.maven.org/maven2/maven-javanet-plugin/maven-javanet-plugin/None/maven-javanet-plugin-None.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/maven-javanet-plugin/maven-javanet-plugin" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/parse_error/springmvc-rest-docs-maven-plugin-1.0-RC1.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/parse_error/springmvc-rest-docs-maven-plugin-1.0-RC1.pom.package.json index 843cc73436e..1831388b7c4 100644 --- a/tests/packagedcode/data/m2/parsing_issues/parse_error/springmvc-rest-docs-maven-plugin-1.0-RC1.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/parse_error/springmvc-rest-docs-maven-plugin-1.0-RC1.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.github.vincentrussell/springmvc-rest-docs-maven-plugin@1.0-RC1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -373,8 +373,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.github.vincentrussell/springmvc-rest-docs-maven-plugin@1.0-RC1", "repository_homepage_url": "https://repo1.maven.org/maven2/com/github/vincentrussell/springmvc-rest-docs-maven-plugin/1.0-RC1/", "repository_download_url": "https://repo1.maven.org/maven2/com/github/vincentrussell/springmvc-rest-docs-maven-plugin/1.0-RC1/springmvc-rest-docs-maven-plugin-1.0-RC1.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/github/vincentrussell/springmvc-rest-docs-maven-plugin/1.0-RC1/springmvc-rest-docs-maven-plugin-1.0-RC1.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/github/vincentrussell/springmvc-rest-docs-maven-plugin/1.0-RC1/springmvc-rest-docs-maven-plugin-1.0-RC1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.github.vincentrussell/springmvc-rest-docs-maven-plugin@1.0-RC1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/was_empty/common-object-1.0.2.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/was_empty/common-object-1.0.2.pom.package.json index aebe4886de7..803a84ed56c 100644 --- a/tests/packagedcode/data/m2/parsing_issues/was_empty/common-object-1.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/was_empty/common-object-1.0.2.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.xson/common-object@1.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.xson/common-object@1.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/xson/common-object/1.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/xson/common-object/1.0.2/common-object-1.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/xson/common-object/1.0.2/common-object-1.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/xson/common-object/1.0.2/common-object-1.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.xson/common-object@1.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/parsing_issues/was_empty/osgl-http-1.1.2.pom.package.json b/tests/packagedcode/data/m2/parsing_issues/was_empty/osgl-http-1.1.2.pom.package.json index 1f55a9f8ddf..975bdb9443b 100644 --- a/tests/packagedcode/data/m2/parsing_issues/was_empty/osgl-http-1.1.2.pom.package.json +++ b/tests/packagedcode/data/m2/parsing_issues/was_empty/osgl-http-1.1.2.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.osgl/osgl-http@1.1.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -83,8 +83,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.osgl/osgl-http@1.1.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/osgl/osgl-http/1.1.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/osgl/osgl-http/1.1.2/osgl-http-1.1.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/osgl/osgl-http/1.1.2/osgl-http-1.1.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/osgl/osgl-http/1.1.2/osgl-http-1.1.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.osgl/osgl-http@1.1.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom.package.json b/tests/packagedcode/data/m2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom.package.json index eb394b4bf3c..f475cb637f8 100644 --- a/tests/packagedcode/data/m2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/plexus/plexus-containers@1.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/plexus/plexus-containers@1.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/plexus/plexus-containers/1.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-containers/1.0.2/plexus-containers-1.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/plexus/plexus-containers@1.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom.package.json b/tests/packagedcode/data/m2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom.package.json index bb772428894..91c275203a2 100644 --- a/tests/packagedcode/data/m2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom.package.json +++ b/tests/packagedcode/data/m2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/plexus/plexus-root@1.0.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -125,8 +125,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/plexus/plexus-root@1.0.3", "repository_homepage_url": "https://repo1.maven.org/maven2/plexus/plexus-root/1.0.3/", "repository_download_url": "https://repo1.maven.org/maven2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-root/1.0.3/plexus-root-1.0.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/plexus/plexus-root@1.0.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom.package.json b/tests/packagedcode/data/m2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom.package.json index 58d464b24bb..9bc2d06ea28 100644 --- a/tests/packagedcode/data/m2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/plexus/plexus-utils@1.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/plexus/plexus-utils@1.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/plexus/plexus-utils/1.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/plexus/plexus-utils/1.0.2/plexus-utils-1.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/plexus/plexus-utils@1.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/quartz/quartz/1.5.1/quartz-1.5.1.pom.package.json b/tests/packagedcode/data/m2/quartz/quartz/1.5.1/quartz-1.5.1.pom.package.json index 503ef71413c..8285b69e650 100644 --- a/tests/packagedcode/data/m2/quartz/quartz/1.5.1/quartz-1.5.1.pom.package.json +++ b/tests/packagedcode/data/m2/quartz/quartz/1.5.1/quartz-1.5.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/quartz/quartz@1.5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/quartz/quartz@1.5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/quartz/quartz/1.5.1/", "repository_download_url": "https://repo1.maven.org/maven2/quartz/quartz/1.5.1/quartz-1.5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/quartz/quartz/1.5.1/quartz-1.5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/quartz/quartz/1.5.1/quartz-1.5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/quartz/quartz@1.5.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/regexp/regexp/1.3/regexp-1.3.pom.package.json b/tests/packagedcode/data/m2/regexp/regexp/1.3/regexp-1.3.pom.package.json index 053f7b5643b..78d548a9075 100644 --- a/tests/packagedcode/data/m2/regexp/regexp/1.3/regexp-1.3.pom.package.json +++ b/tests/packagedcode/data/m2/regexp/regexp/1.3/regexp-1.3.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/regexp/regexp@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/regexp/regexp@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/regexp/regexp/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/regexp/regexp/1.3/regexp-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/regexp/regexp/1.3/regexp-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/regexp/regexp/1.3/regexp-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/regexp/regexp@1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/validator/commons-validator/1.1.4/commons-validator-1.1.4.pom.package.json b/tests/packagedcode/data/m2/validator/commons-validator/1.1.4/commons-validator-1.1.4.pom.package.json index 5141011c2e9..564ca296c07 100644 --- a/tests/packagedcode/data/m2/validator/commons-validator/1.1.4/commons-validator-1.1.4.pom.package.json +++ b/tests/packagedcode/data/m2/validator/commons-validator/1.1.4/commons-validator-1.1.4.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.1.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/commons-validator/commons-validator@1.1.4", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.1.4/", "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.1.4/commons-validator-1.1.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.1.4/commons-validator-1.1.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.1.4/commons-validator-1.1.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-validator/commons-validator@1.1.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/validator/commons-validator/1.2.0/commons-validator-1.2.0.pom.package.json b/tests/packagedcode/data/m2/validator/commons-validator/1.2.0/commons-validator-1.2.0.pom.package.json index 7d8cfab755a..2851cdf0903 100644 --- a/tests/packagedcode/data/m2/validator/commons-validator/1.2.0/commons-validator-1.2.0.pom.package.json +++ b/tests/packagedcode/data/m2/validator/commons-validator/1.2.0/commons-validator-1.2.0.pom.package.json @@ -256,10 +256,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -317,8 +317,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-validator/commons-validator@1.2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-validator/commons-validator@1.2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/validator/commons-validator/1.3.1/commons-validator-1.3.1.pom.package.json b/tests/packagedcode/data/m2/validator/commons-validator/1.3.1/commons-validator-1.3.1.pom.package.json index 67b1dbeaa83..37aa34201d5 100644 --- a/tests/packagedcode/data/m2/validator/commons-validator/1.3.1/commons-validator-1.3.1.pom.package.json +++ b/tests/packagedcode/data/m2/validator/commons-validator/1.3.1/commons-validator-1.3.1.pom.package.json @@ -263,10 +263,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.3.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -324,8 +324,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-validator/commons-validator@1.3.1", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.3.1/", "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.3.1/commons-validator-1.3.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.3.1/commons-validator-1.3.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.3.1/commons-validator-1.3.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-validator/commons-validator@1.3.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom.package.json b/tests/packagedcode/data/m2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom.package.json index ff530ae1170..eaf74c568a6 100644 --- a/tests/packagedcode/data/m2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom.package.json +++ b/tests/packagedcode/data/m2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom.package.json @@ -32,14 +32,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/velocity/velocity-dep@1.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/velocity/velocity-dep@1.4", "repository_homepage_url": "https://repo1.maven.org/maven2/velocity/velocity-dep/1.4/", "repository_download_url": "https://repo1.maven.org/maven2/velocity/velocity-dep/1.4/velocity-dep-1.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/velocity/velocity-dep/1.4/velocity-dep-1.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/velocity/velocity-dep@1.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/velocity/velocity/1.4/velocity-1.4.pom.package.json b/tests/packagedcode/data/m2/velocity/velocity/1.4/velocity-1.4.pom.package.json index 6e6ac4fe118..bca57ab3528 100644 --- a/tests/packagedcode/data/m2/velocity/velocity/1.4/velocity-1.4.pom.package.json +++ b/tests/packagedcode/data/m2/velocity/velocity/1.4/velocity-1.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/velocity/velocity@1.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -55,8 +55,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/velocity/velocity@1.4", "repository_homepage_url": "https://repo1.maven.org/maven2/velocity/velocity/1.4/", "repository_download_url": "https://repo1.maven.org/maven2/velocity/velocity/1.4/velocity-1.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/velocity/velocity/1.4/velocity-1.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/velocity/velocity/1.4/velocity-1.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/velocity/velocity@1.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom.package.json b/tests/packagedcode/data/m2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom.package.json index f6003e781d1..07bba5f8253 100644 --- a/tests/packagedcode/data/m2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom.package.json +++ b/tests/packagedcode/data/m2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom.package.json @@ -39,14 +39,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/xml-apis/xml-apis@1.0.b2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/xml-apis/xml-apis@1.0.b2", "repository_homepage_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/1.0.b2/", "repository_download_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar", - "api_data_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom" + "api_data_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/xml-apis/xml-apis@1.0.b2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom.package.json b/tests/packagedcode/data/m2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom.package.json index 58a072fdaf9..0c4c9d20610 100644 --- a/tests/packagedcode/data/m2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom.package.json +++ b/tests/packagedcode/data/m2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/xml-apis/xml-apis@2.0.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/xml-apis/xml-apis@2.0.2", "repository_homepage_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/2.0.2/", "repository_download_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/xml-apis/xml-apis@2.0.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom.package.json b/tests/packagedcode/data/m2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom.package.json index 9be01760414..4748e505dca 100644 --- a/tests/packagedcode/data/m2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom.package.json +++ b/tests/packagedcode/data/m2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom.package.json @@ -31,14 +31,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/xmlpull/xmlpull@1.1.3.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/xmlpull/xmlpull@1.1.3.1", "repository_homepage_url": "https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/", "repository_download_url": "https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/xmlpull/xmlpull@1.1.3.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/m2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom.package.json b/tests/packagedcode/data/m2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom.package.json index 5c2a0d2f6d8..c506385ef4d 100644 --- a/tests/packagedcode/data/m2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom.package.json +++ b/tests/packagedcode/data/m2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/xpp3/xpp3_min@1.1.3.4.O?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/xpp3/xpp3_min@1.1.3.4.O", "repository_homepage_url": "https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.3.4.O/", "repository_download_url": "https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar", - "api_data_url": "https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom" + "api_data_url": "https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/xpp3/xpp3_min@1.1.3.4.O" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/activemq-camel/activemq-camel-pom.xml.package.json b/tests/packagedcode/data/maven2/activemq-camel/activemq-camel-pom.xml.package.json index 3da8df9d3e2..09434fba8eb 100644 --- a/tests/packagedcode/data/maven2/activemq-camel/activemq-camel-pom.xml.package.json +++ b/tests/packagedcode/data/maven2/activemq-camel/activemq-camel-pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -130,8 +130,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/adarwin-1.0/adarwin-1.0.pom.package.json b/tests/packagedcode/data/maven2/adarwin-1.0/adarwin-1.0.pom.package.json index f62be03bd93..17f07dc043e 100644 --- a/tests/packagedcode/data/maven2/adarwin-1.0/adarwin-1.0.pom.package.json +++ b/tests/packagedcode/data/maven2/adarwin-1.0/adarwin-1.0.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/adarwin/adarwin@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/adarwin/adarwin@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/adarwin/adarwin@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/ant-jai-1.7.0/ant-jai-1.7.0.pom.package.json b/tests/packagedcode/data/maven2/ant-jai-1.7.0/ant-jai-1.7.0.pom.package.json index 7afd5c67810..71810e853b6 100644 --- a/tests/packagedcode/data/maven2/ant-jai-1.7.0/ant-jai-1.7.0.pom.package.json +++ b/tests/packagedcode/data/maven2/ant-jai-1.7.0/ant-jai-1.7.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jai@1.7.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,8 +58,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/ant-jsch-1.7.0/ant-jsch-1.7.0.pom.package.json b/tests/packagedcode/data/maven2/ant-jsch-1.7.0/ant-jsch-1.7.0.pom.package.json index 83c737707b0..dadfecd89b8 100644 --- a/tests/packagedcode/data/maven2/ant-jsch-1.7.0/ant-jsch-1.7.0.pom.package.json +++ b/tests/packagedcode/data/maven2/ant-jsch-1.7.0/ant-jsch-1.7.0.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jsch@1.7.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -49,8 +49,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/aopalliance-1.0/aopalliance-1.0.pom.package.json b/tests/packagedcode/data/maven2/aopalliance-1.0/aopalliance-1.0.pom.package.json index ca32cf6e0c5..13d8fdee5df 100644 --- a/tests/packagedcode/data/maven2/aopalliance-1.0/aopalliance-1.0.pom.package.json +++ b/tests/packagedcode/data/maven2/aopalliance-1.0/aopalliance-1.0.pom.package.json @@ -37,14 +37,15 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aopalliance/aopalliance@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/bcel-5.1/bcel-5.1.pom.package.json b/tests/packagedcode/data/maven2/bcel-5.1/bcel-5.1.pom.package.json index b045797eb36..1bf0871623e 100644 --- a/tests/packagedcode/data/maven2/bcel-5.1/bcel-5.1.pom.package.json +++ b/tests/packagedcode/data/maven2/bcel-5.1/bcel-5.1.pom.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/bcel/bcel@5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/bcel/bcel@5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/", "repository_download_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/bcel/bcel@5.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.package.json b/tests/packagedcode/data/maven2/classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.package.json index c0fbc1253d4..6d330894990 100644 --- a/tests/packagedcode/data/maven2/classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.package.json +++ b/tests/packagedcode/data/maven2/classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.package.json @@ -53,14 +53,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/classworlds/classworlds@1.1-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/commons-fileupload-1.0/commons-fileupload-1.0.pom.package.json b/tests/packagedcode/data/maven2/commons-fileupload-1.0/commons-fileupload-1.0.pom.package.json index d6a91b82fed..dfda4410e5c 100644 --- a/tests/packagedcode/data/maven2/commons-fileupload-1.0/commons-fileupload-1.0.pom.package.json +++ b/tests/packagedcode/data/maven2/commons-fileupload-1.0/commons-fileupload-1.0.pom.package.json @@ -74,10 +74,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-fileupload/commons-fileupload@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -99,8 +99,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/commons-validator-1.2.0/commons-validator-1.2.0.pom.package.json b/tests/packagedcode/data/maven2/commons-validator-1.2.0/commons-validator-1.2.0.pom.package.json index 7d8cfab755a..2851cdf0903 100644 --- a/tests/packagedcode/data/maven2/commons-validator-1.2.0/commons-validator-1.2.0.pom.package.json +++ b/tests/packagedcode/data/maven2/commons-validator-1.2.0/commons-validator-1.2.0.pom.package.json @@ -256,10 +256,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -317,8 +317,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-validator/commons-validator@1.2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-validator/commons-validator@1.2.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/dbwebx_pom/dbwebx_pom.xml.package.json b/tests/packagedcode/data/maven2/dbwebx_pom/dbwebx_pom.xml.package.json index ebe689ff7d3..b8f3fad778f 100644 --- a/tests/packagedcode/data/maven2/dbwebx_pom/dbwebx_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/dbwebx_pom/dbwebx_pom.xml.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/easyconf-0.9.0/easyconf-0.9.0.pom.package.json b/tests/packagedcode/data/maven2/easyconf-0.9.0/easyconf-0.9.0.pom.package.json index 45a0796551a..19f993e76d3 100644 --- a/tests/packagedcode/data/maven2/easyconf-0.9.0/easyconf-0.9.0.pom.package.json +++ b/tests/packagedcode/data/maven2/easyconf-0.9.0/easyconf-0.9.0.pom.package.json @@ -60,10 +60,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/easyconf/easyconf@0.9.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -229,8 +229,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/easyconf/easyconf@0.9.0", "repository_homepage_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/", "repository_download_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/easyconf/easyconf@0.9.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json b/tests/packagedcode/data/maven2/findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json index 94a798c4b27..73a305acf57 100644 --- a/tests/packagedcode/data/maven2/findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json +++ b/tests/packagedcode/data/maven2/findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json @@ -60,10 +60,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/fna2_pom/fna2_pom.xml.package.json b/tests/packagedcode/data/maven2/fna2_pom/fna2_pom.xml.package.json index c1edb71c30c..54001e74cb0 100644 --- a/tests/packagedcode/data/maven2/fna2_pom/fna2_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/fna2_pom/fna2_pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -121,8 +121,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/fna_pom_project/fna_pom_project.xml.package.json b/tests/packagedcode/data/maven2/fna_pom_project/fna_pom_project.xml.package.json index 3f7119da7c6..627f6b9a45c 100644 --- a/tests/packagedcode/data/maven2/fna_pom_project/fna_pom_project.xml.package.json +++ b/tests/packagedcode/data/maven2/fna_pom_project/fna_pom_project.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/foo-pom/foo-pom.xml.package.json b/tests/packagedcode/data/maven2/foo-pom/foo-pom.xml.package.json index 05c94caf9a0..41a565bb9b9 100644 --- a/tests/packagedcode/data/maven2/foo-pom/foo-pom.xml.package.json +++ b/tests/packagedcode/data/maven2/foo-pom/foo-pom.xml.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -118,8 +118,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/gero_pom/gero_pom.xml.package.json b/tests/packagedcode/data/maven2/gero_pom/gero_pom.xml.package.json index 6258da6c9ed..95be9235199 100644 --- a/tests/packagedcode/data/maven2/gero_pom/gero_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/gero_pom/gero_pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/idega_pom/idega_pom.xml.package.json b/tests/packagedcode/data/maven2/idega_pom/idega_pom.xml.package.json index 1f554bb1744..76785c8f27d 100644 --- a/tests/packagedcode/data/maven2/idega_pom/idega_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/idega_pom/idega_pom.xml.package.json @@ -53,10 +53,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -96,8 +96,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/jrecordbind-2.3.4/jrecordbind-2.3.4.pom.package.json b/tests/packagedcode/data/maven2/jrecordbind-2.3.4/jrecordbind-2.3.4.pom.package.json index 05409403003..6d6e94182b1 100644 --- a/tests/packagedcode/data/maven2/jrecordbind-2.3.4/jrecordbind-2.3.4.pom.package.json +++ b/tests/packagedcode/data/maven2/jrecordbind-2.3.4/jrecordbind-2.3.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -82,8 +82,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", "repository_homepage_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/", "repository_download_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/log4j/log4j-pom.xml.package.json b/tests/packagedcode/data/maven2/log4j/log4j-pom.xml.package.json index 9910162b479..e08e62d1a12 100644 --- a/tests/packagedcode/data/maven2/log4j/log4j-pom.xml.package.json +++ b/tests/packagedcode/data/maven2/log4j/log4j-pom.xml.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/log4j/log4j@1.2.15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -100,8 +100,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/log4j/log4j@1.2.15", "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/", "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.jar", - "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom" + "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/log4j/log4j@1.2.15" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/logback-access/logback-access.pom.package.json b/tests/packagedcode/data/maven2/logback-access/logback-access.pom.package.json index f553060348b..3b2699aa265 100644 --- a/tests/packagedcode/data/maven2/logback-access/logback-access.pom.package.json +++ b/tests/packagedcode/data/maven2/logback-access/logback-access.pom.package.json @@ -31,10 +31,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ch.qos.logback/logback-access@0.2.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -83,8 +83,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5", "repository_homepage_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/", "repository_download_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json b/tests/packagedcode/data/maven2/plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json index f46d0905c0b..13b61ec9cca 100644 --- a/tests/packagedcode/data/maven2/plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json +++ b/tests/packagedcode/data/maven2/plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json @@ -109,10 +109,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,8 +152,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/pom-generic/pom.xml.package.json b/tests/packagedcode/data/maven2/pom-generic/pom.xml.package.json index f7e84774a40..cf0ac47f0e9 100644 --- a/tests/packagedcode/data/maven2/pom-generic/pom.xml.package.json +++ b/tests/packagedcode/data/maven2/pom-generic/pom.xml.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/proper-pom/proper_pom.xml.package.json b/tests/packagedcode/data/maven2/proper-pom/proper_pom.xml.package.json index 6258da6c9ed..95be9235199 100644 --- a/tests/packagedcode/data/maven2/proper-pom/proper_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/proper-pom/proper_pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/rel_pom/rel_pom.xml.package.json b/tests/packagedcode/data/maven2/rel_pom/rel_pom.xml.package.json index 915742c488d..2425e5cde29 100644 --- a/tests/packagedcode/data/maven2/rel_pom/rel_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/rel_pom/rel_pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.modeler/modeler@0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,8 +112,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.modeler/modeler@0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.modeler/modeler@0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/sea_pom/sea_pom.xml.package.json b/tests/packagedcode/data/maven2/sea_pom/sea_pom.xml.package.json index 5f89fcaf969..f741ca68e2f 100644 --- a/tests/packagedcode/data/maven2/sea_pom/sea_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/sea_pom/sea_pom.xml.package.json @@ -46,10 +46,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -386,8 +386,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/specs-1.3/specs-1.3.pom.package.json b/tests/packagedcode/data/maven2/specs-1.3/specs-1.3.pom.package.json index ba26c62f851..a2ff4f9fae8 100644 --- a/tests/packagedcode/data/maven2/specs-1.3/specs-1.3.pom.package.json +++ b/tests/packagedcode/data/maven2/specs-1.3/specs-1.3.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/specs@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -40,8 +40,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/spring-2.5.4/spring-2.5.4.pom.package.json b/tests/packagedcode/data/maven2/spring-2.5.4/spring-2.5.4.pom.package.json index efb6b8d0f8f..acf8c5bb3c7 100644 --- a/tests/packagedcode/data/maven2/spring-2.5.4/spring-2.5.4.pom.package.json +++ b/tests/packagedcode/data/maven2/spring-2.5.4/spring-2.5.4.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -631,8 +631,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring@2.5.4" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/spring-orm-2.5.3/spring-orm-2.5.3.pom.package.json b/tests/packagedcode/data/maven2/spring-orm-2.5.3/spring-orm-2.5.3.pom.package.json index 23b59d94558..772ae6b7cab 100644 --- a/tests/packagedcode/data/maven2/spring-orm-2.5.3/spring-orm-2.5.3.pom.package.json +++ b/tests/packagedcode/data/maven2/spring-orm-2.5.3/spring-orm-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-orm@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -190,8 +190,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-orm@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-orm@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.package.json b/tests/packagedcode/data/maven2/spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.package.json index c22828b117b..03352de8c00 100644 --- a/tests/packagedcode/data/maven2/spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.package.json +++ b/tests/packagedcode/data/maven2/spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.package.json @@ -39,10 +39,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-webmvc@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -244,8 +244,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.package.json b/tests/packagedcode/data/maven2/startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.package.json index 084f1d94a00..7ca26cd8001 100644 --- a/tests/packagedcode/data/maven2/startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.package.json +++ b/tests/packagedcode/data/maven2/startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.package.json @@ -32,10 +32,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,8 +48,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/uni_pom/uni_pom.xml.package.json b/tests/packagedcode/data/maven2/uni_pom/uni_pom.xml.package.json index 916cae51bbe..0260402a54f 100644 --- a/tests/packagedcode/data/maven2/uni_pom/uni_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/uni_pom/uni_pom.xml.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -76,8 +76,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/urwerky_pom/urwerky_pom.xml.package.json b/tests/packagedcode/data/maven2/urwerky_pom/urwerky_pom.xml.package.json index b119f332560..5783c4f05a5 100644 --- a/tests/packagedcode/data/maven2/urwerky_pom/urwerky_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/urwerky_pom/urwerky_pom.xml.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0", "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/", "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/webre_pom/webre_pom.xml.package.json b/tests/packagedcode/data/maven2/webre_pom/webre_pom.xml.package.json index ccb9d6b136d..ce928dd8f51 100644 --- a/tests/packagedcode/data/maven2/webre_pom/webre_pom.xml.package.json +++ b/tests/packagedcode/data/maven2/webre_pom/webre_pom.xml.package.json @@ -24,14 +24,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven2/xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.package.json b/tests/packagedcode/data/maven2/xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.package.json index ed2477c428e..7e851e8d8c0 100644 --- a/tests/packagedcode/data/maven2/xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.package.json +++ b/tests/packagedcode/data/maven2/xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.package.json @@ -24,10 +24,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -94,8 +94,9 @@ "resolved_package": {} } ], - "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" } \ No newline at end of file diff --git a/tests/packagedcode/data/maven_misc/extracted-jar-expected.json b/tests/packagedcode/data/maven_misc/extracted-jar-expected.json new file mode 100644 index 00000000000..0b0353e3ae3 --- /dev/null +++ b/tests/packagedcode/data/maven_misc/extracted-jar-expected.json @@ -0,0 +1,498 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true, + "--processes": "-1" + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 4 + } + } + ], + "dependencies": [ + { + "purl": "pkg:maven/org.activiti/activiti-bpmn-model", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.activiti/activiti-bpmn-model?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-awt-util", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-awt-util?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-dom", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-dom?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-svggen", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-svggen?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.slf4j/slf4j-api", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.slf4j/slf4j-api?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.springframework/spring-context", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.springframework/spring-context?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.activiti/activiti-engine", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.activiti/activiti-engine?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/junit/junit", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/junit/junit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/com.h2database/h2", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/com.h2database/h2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-svg-dom", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-svg-dom?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-anim", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-anim?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-parser", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {}, + "dependency_uid": "pkg:maven/org.apache.xmlgraphics/batik-parser?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "datasource_id": "maven_pom" + } + ], + "packages": [ + { + "type": "maven", + "namespace": "org.activiti", + "name": "activiti-image-generator", + "version": "7-201802-EA", + "qualifiers": {}, + "subpath": null, + "primary_language": "Java", + "description": "Activiti :: Image Generator", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?classifier=sources" + ], + "extra_data": {}, + "repository_homepage_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/", + "repository_download_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/activiti-image-generator-7-201802-EA.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/activiti-image-generator-7-201802-EA.pom", + "package_uid": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml" + ], + "datasource_ids": [ + "maven_pom" + ], + "purl": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA" + } + ], + "files": [ + { + "path": "extracted-jar", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml", + "type": "file", + "package_data": [ + { + "type": "maven", + "namespace": "org.activiti", + "name": "activiti-image-generator", + "version": "7-201802-EA", + "qualifiers": {}, + "subpath": null, + "primary_language": "Java", + "description": "Activiti :: Image Generator", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?classifier=sources" + ], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:maven/org.activiti/activiti-bpmn-model", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-awt-util", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-dom", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-svggen", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.slf4j/slf4j-api", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.springframework/spring-context", + "extracted_requirement": null, + "scope": "compile", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.activiti/activiti-engine", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/junit/junit", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/com.h2database/h2", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-svg-dom", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-anim", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + }, + { + "purl": "pkg:maven/org.apache.xmlgraphics/batik-parser", + "extracted_requirement": null, + "scope": "test", + "is_runtime": false, + "is_optional": true, + "is_resolved": null, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/", + "repository_download_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/activiti-image-generator-7-201802-EA.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/activiti/activiti-image-generator/7-201802-EA/activiti-image-generator-7-201802-EA.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA" + } + ], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:maven/org.activiti/activiti-image-generator@7-201802-EA?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF b/tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF similarity index 100% rename from tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF rename to tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/MANIFEST.MF diff --git a/tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties b/tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties similarity index 100% rename from tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties rename to tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.properties diff --git a/tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml b/tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml similarity index 100% rename from tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml rename to tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/META-INF/maven/org.activiti/activiti-image-generator/pom.xml diff --git a/tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java b/tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java similarity index 100% rename from tests/packagedcode/data/maven_misc/package_root/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java rename to tests/packagedcode/data/maven_misc/extracted-jar/activiti-image-generator-7-201802-EA-sources.jar-extract/org/activiti/image/exception/ActivitiImageException.java diff --git a/tests/packagedcode/data/maven_misc/parse/ant-1.6.5.pom.json b/tests/packagedcode/data/maven_misc/parse/ant-1.6.5.pom.json index 34cecb5997c..9e26dfeeb6e 100644 --- a/tests/packagedcode/data/maven_misc/parse/ant-1.6.5.pom.json +++ b/tests/packagedcode/data/maven_misc/parse/ant-1.6.5.pom.json @@ -1,42 +1 @@ -{ - "model_version": null, - "group_id": null, - "artifact_id": null, - "version": "1.6.5", - "classifier": null, - "packaging": "jar", - "parent": {}, - "name": null, - "description": null, - "inception_year": null, - "url": null, - "organization_name": null, - "organization_url": null, - "licenses": [], - "developers": [], - "contributors": [], - "modules": [], - "mailing_lists": [], - "scm": {}, - "issue_management": {}, - "ci_management": {}, - "distribution_management": {}, - "repositories": [], - "plugin_repositories": [], - "dependencies": { - "compile": [ - { - "group_id": "xerces", - "artifact_id": "xercesImpl", - "version": "2.6.2", - "required": false - }, - { - "group_id": "xml-apis", - "artifact_id": "xml-apis", - "version": "1.3.04", - "required": false - } - ] - } -} \ No newline at end of file +{} \ No newline at end of file diff --git a/tests/packagedcode/data/maven_misc/parse/mysql-connector-java-5.0.4.pom.json b/tests/packagedcode/data/maven_misc/parse/mysql-connector-java-5.0.4.pom.json index e5b444d6f9b..9e26dfeeb6e 100644 --- a/tests/packagedcode/data/maven_misc/parse/mysql-connector-java-5.0.4.pom.json +++ b/tests/packagedcode/data/maven_misc/parse/mysql-connector-java-5.0.4.pom.json @@ -1,32 +1 @@ -{ - "model_version": "4.0.0", - "group_id": null, - "artifact_id": null, - "version": null, - "classifier": null, - "packaging": "jar", - "parent": {}, - "name": null, - "description": null, - "inception_year": null, - "url": null, - "organization_name": null, - "organization_url": null, - "licenses": [], - "developers": [], - "contributors": [], - "modules": [], - "mailing_lists": [], - "scm": { - "connection": null, - "developer_connection": null, - "url": "http://svn.mysql.com/svnpublic/connector-j/trunk/connector-j", - "tag": null - }, - "issue_management": {}, - "ci_management": {}, - "distribution_management": {}, - "repositories": [], - "plugin_repositories": [], - "dependencies": {} -} \ No newline at end of file +{} \ No newline at end of file diff --git a/tests/packagedcode/data/maven_misc/parse/plexus-root-1.0.3.pom.json b/tests/packagedcode/data/maven_misc/parse/plexus-root-1.0.3.pom.json index 9971db260e0..9e26dfeeb6e 100644 --- a/tests/packagedcode/data/maven_misc/parse/plexus-root-1.0.3.pom.json +++ b/tests/packagedcode/data/maven_misc/parse/plexus-root-1.0.3.pom.json @@ -1,39 +1 @@ -{ - "model_version": null, - "group_id": null, - "artifact_id": null, - "version": null, - "classifier": null, - "packaging": "jar", - "parent": {}, - "name": null, - "description": null, - "inception_year": null, - "url": null, - "organization_name": null, - "organization_url": null, - "licenses": [], - "developers": [ - { - "id": "trygvis", - "name": "Trygve Laugstl", - "email": "trygvis@codehaus.org", - "url": null, - "organization": null, - "organization_url": null, - "roles": [ - "Developer" - ] - } - ], - "contributors": [], - "modules": [], - "mailing_lists": [], - "scm": {}, - "issue_management": {}, - "ci_management": {}, - "distribution_management": {}, - "repositories": [], - "plugin_repositories": [], - "dependencies": {} -} \ No newline at end of file +{} \ No newline at end of file diff --git a/tests/packagedcode/test_jar_manifest.py b/tests/packagedcode/test_jar_manifest.py index 6944722c861..4122c862b37 100644 --- a/tests/packagedcode/test_jar_manifest.py +++ b/tests/packagedcode/test_jar_manifest.py @@ -14,7 +14,7 @@ from commoncode import text from commoncode import testcase -from packagedcode.jar_manifest import get_normalized_package_data +from packagedcode.jar_manifest import get_normalized_java_manifest_data from packagedcode.jar_manifest import parse_manifest from scancode_config import REGEN_TEST_FIXTURES @@ -43,15 +43,15 @@ def check_parse_manifest(self, test_manifest, regen=REGEN_TEST_FIXTURES): assert json.dumps(parsed_manifest) == json.dumps(expected) - def check_get_normalized_package_data(self, test_manifest, regen=REGEN_TEST_FIXTURES): + def check_get_normalized_java_manifest_data(self, test_manifest, regen=REGEN_TEST_FIXTURES): """ - Test the get_normalized_package_data() function using the MANIFEST file + Test the get_normalized_java_manifest_data() function using the MANIFEST file at `test_manifest` against an expected JSON from the same name with a .package-data.json extension. """ test_manifest_loc = self.get_test_loc(test_manifest) manifest_sections = parse_manifest(test_manifest_loc) - package = get_normalized_package_data(manifest_sections[0]) or {} + package = get_normalized_java_manifest_data(manifest_sections[0]) or {} expected_json_loc = test_manifest_loc + '.package-data.json' @@ -96,7 +96,7 @@ def test_manifest(self): self.check_parse_manifest(test_manifest_loc, regen) else: def test_manifest(self): - self.check_get_normalized_package_data(test_manifest_loc, regen) + self.check_get_normalized_java_manifest_data(test_manifest_loc, regen) # set a proper function name to display in reports and use in discovery # function names are best as bytes diff --git a/tests/packagedcode/test_maven.py b/tests/packagedcode/test_maven.py index 7802fc0836d..302efb51068 100644 --- a/tests/packagedcode/test_maven.py +++ b/tests/packagedcode/test_maven.py @@ -16,20 +16,17 @@ from commoncode import fileutils from commoncode import text from commoncode import testcase -from commoncode.resource import Codebase from packagedcode import maven +from packagedcode import models +from scancode.cli_test_utils import check_json_scan +from scancode.cli_test_utils import run_scan_click from scancode_config import REGEN_TEST_FIXTURES - class TestIsPom(testcase.FileBasedTesting): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') - def test_is_pom_non_pom(self): - test_file = self.get_test_loc('maven_misc/non-maven.pom') - assert not maven.PomXml.is_package_data_file(test_file) - def test_is_pom_maven2(self): test_dir = self.get_test_loc('maven2') for test_file in fileutils.resource_iter(test_dir, with_dirs=False): @@ -37,11 +34,7 @@ def test_is_pom_maven2(self): continue loc = os.path.join(test_dir, test_file) - assert maven.PomXml.is_package_data_file(loc), loc + ' should be a POM' - - def test_is_pom_not_misc2(self): - test_file = self.get_test_loc('maven_misc/properties-section-single.xml') - assert not maven.PomXml.is_package_data_file(test_file) + assert maven.MavenPomXmlHandler.is_datafile(loc), loc + ' should be a POM' def test_is_pom_m2(self): test_dir = self.get_test_loc('m2') @@ -50,11 +43,15 @@ def test_is_pom_m2(self): continue loc = os.path.join(test_dir, test_file) - assert maven.PomXml.is_package_data_file(loc), 'file://' + loc + ' should be a POM' + assert maven.MavenPomXmlHandler.is_datafile(loc), 'file://' + loc + ' should be a POM' - def test_is_pom_not_misc(self): + def test_is_pom_is_detected_based_content(self): test_file = self.get_test_loc('maven_misc/properties-section.xml') - assert not maven.PomXml.is_package_data_file(test_file) + assert maven.MavenPomXmlHandler.is_datafile(test_file) + + def test_is_pom_is_detected_based_content2(self): + test_file = self.get_test_loc('maven_misc/properties-section-single.xml') + assert maven.MavenPomXmlHandler.is_datafile(test_file) def compare_results(results, test_pom_loc, expected_json_loc, regen=REGEN_TEST_FIXTURES): @@ -68,7 +65,7 @@ def compare_results(results, test_pom_loc, expected_json_loc, regen=REGEN_TEST_F results_dump = json.dumps(results, indent=2) expected_dump = json.dumps(expected, indent=2) try: - assert results_dump == expected_dump + assert results == expected except AssertionError: test_pom_loc = 'file://' + test_pom_loc expected_json_loc = 'file://' + expected_json_loc @@ -76,14 +73,15 @@ def compare_results(results, test_pom_loc, expected_json_loc, regen=REGEN_TEST_F assert results_dump == '\n'.join(expected) -def parse_pom(location=None, text=None, check_is_pom=False): +def parse_pom(location=None): """ Return a POM mapping from the Maven POM file at location. """ - pom = maven.get_maven_pom(location, text, check_is_pom) - if not pom: - return {} - return pom.to_dict() + pom = maven.get_maven_pom(location=location) + if pom: + return pom.to_dict() + + return {} class BaseMavenCase(testcase.FileBasedTesting): @@ -95,7 +93,7 @@ def check_parse_pom(self, test_pom, regen=REGEN_TEST_FIXTURES): from the same name with a .json extension. """ test_pom_loc = self.get_test_loc(test_pom) - expected_json_loc = test_pom_loc + '.json' + expected_json_loc = f'{test_pom_loc}.json' results = parse_pom(location=test_pom_loc) compare_results(results, test_pom_loc, expected_json_loc, regen) @@ -105,25 +103,27 @@ def check_parse_to_package(self, test_pom, regen=REGEN_TEST_FIXTURES): expected JSON from the same name with a .package.json extension. """ test_pom_loc = self.get_test_loc(test_pom) - expected_json_loc = test_pom_loc + '.package.json' - packages = list(maven.PomXml.recognize(location=test_pom_loc)) - if not packages: + expected_json_loc = f'{test_pom_loc}.package.json' + packages_data = list(maven.MavenPomXmlHandler.parse(location=test_pom_loc)) + if not packages_data: results = {} else: - package = packages.pop() - package.license_expression = package.compute_normalized_license() - results = package.to_dict() + package_data = packages_data.pop() + package_data.license_expression = maven.MavenPomXmlHandler.compute_normalized_license(package_data) + results = package_data.to_dict() compare_results(results, test_pom_loc, expected_json_loc, regen) class TestMavenMisc(BaseMavenCase): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') - def test_parse_pom_non_pom(self): + def test_parse_pom_non_pom_raise_expection(self): test_pom_loc = self.get_test_loc('maven_misc/non-maven.pom') - results = parse_pom(location=test_pom_loc, check_is_pom=True) - assert results == {} - self.check_parse_pom(test_pom_loc, regen=REGEN_TEST_FIXTURES) + try: + parse_pom(location=test_pom_loc) + raise Exception('Exception not raised') + except Exception: + pass def test_MavenPom_simple_creation(self): test_loc = self.get_test_loc('maven_misc/mini-pom.xml') @@ -199,30 +199,19 @@ def test_parse_to_package_base(self): test_file = self.get_test_loc('maven_misc/spring-beans-4.2.2.RELEASE.pom.xml') self.check_parse_pom(test_file, regen=REGEN_TEST_FIXTURES) - def test_parse_to_package_and_validate(self): - test_file = self.get_test_loc('maven_misc/spring-beans-4.2.2.RELEASE.pom.xml') - packages = maven.PomXml.recognize(test_file) - package = list(packages).pop() - assert isinstance(package, maven.PomXml) - def test_parse_to_package_then_back(self): test_file = self.get_test_loc('maven_misc/spring-beans-4.2.2.RELEASE.pom.xml') - packages = maven.PomXml.recognize(test_file) + packages = maven.MavenPomXmlHandler.parse(location=test_file) package = list(packages).pop() - package2 = maven.MavenPomPackageData.create(**package.to_dict()) + package2 = models.PackageData.from_dict(package.to_dict()) assert package2.to_dict().items() == package.to_dict().items() - def test_package_root_is_properly_returned_for_metainf_poms(self): - from packagedcode.plugin_package import PackageScanner - test_dir = self.get_test_loc('maven_misc/package_root') - codebase = Codebase(test_dir, resource_attributes=PackageScanner.resource_attributes) - manifest_resource = [r for r in codebase.walk() if r.name == 'pom.xml'][0] - packages = list(maven.PomXml.recognize(manifest_resource.location)) - assert packages - manifest_resource.package_data.append(packages[0].to_dict()) - manifest_resource.save(codebase) - proot = maven.MavenPomPackageData.get_package_root(manifest_resource, codebase) - assert proot.name == 'activiti-image-generator-7-201802-EA-sources.jar-extract' + def test_package_with_extracted_jars_and_metainf_poms_is_detected_correctly(self): + test_dir = self.get_test_loc('maven_misc/extracted-jar') + result_file = self.get_temp_file('json') + expected_file = self.get_test_loc('maven_misc/extracted-jar-expected.json') + run_scan_click(['--package', '--processes', '-1', test_dir, '--json', result_file]) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_dependency_not_missing(self): test_file = self.get_test_loc('maven2/log4j/log4j-pom.xml') @@ -342,17 +331,14 @@ def test_get_properties_advanced(self): def test_parse_can_run_without_pom_check(self): test_loc = self.get_test_loc('maven_misc/ant-1.6.5.maven') - poms = maven.PomXml.recognize(test_loc, check_is_pom=False) - pom = list(poms).pop() - assert pom - poms = maven.PomXml.recognize(test_loc, check_is_pom=True) + poms = maven.MavenPomXmlHandler.parse(test_loc) pom = list(poms) assert not pom def test_parse_will_load_extra_pom_properties_if_file_present(self): # there is a file at maven2_props/props_file/activiti-image-generator/pom.properties test_loc = self.get_test_loc('maven2_props/props_file/activiti-image-generator/pom.xml') - poms = maven.PomXml.recognize(test_loc, check_is_pom=False) + poms = maven.MavenPomXmlHandler.parse(test_loc) pom = list(poms).pop() assert pom.namespace == 'org.activiti' @@ -510,6 +496,7 @@ class TestMavenDataDrivenPomMisc(BaseMavenCase): pytestmark = pytest.mark.scanslow test_data_dir = os.path.join(os.path.dirname(__file__), 'data') + build_tests(test_dir='maven_misc/parse', clazz=TestMavenDataDrivenPomMisc, prefix='test_maven2_parse_misc_', check_pom=True, regen=REGEN_TEST_FIXTURES) @@ -520,6 +507,7 @@ class TestMavenDataDrivenPomMisc(BaseMavenCase): class TestMavenDataDrivenPomBasic(BaseMavenCase): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') + build_tests(test_dir='maven2', clazz=TestMavenDataDrivenPomBasic, prefix='test_maven2_basic_parse_', check_pom=True, regen=REGEN_TEST_FIXTURES) build_tests(test_dir='maven2', clazz=TestMavenDataDrivenPomBasic, @@ -530,6 +518,7 @@ class TestMavenDataDrivenPomComprehensive(BaseMavenCase): pytestmark = pytest.mark.scanslow test_data_dir = os.path.join(os.path.dirname(__file__), 'data') + # note: we use short dir names to deal with Windows long paths limitations build_tests(test_dir='m2', clazz=TestMavenDataDrivenPomComprehensive, prefix='test_maven2_parse', check_pom=True, regen=REGEN_TEST_FIXTURES) From b1310744eb9be235873928c140dcf8468ddecbdb Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 20:50:07 +0200 Subject: [PATCH 23/36] Adopt new handler design for Windows packages We now have these data file handlers: * MsiInstallerHandler * NugetNupkgHandler * NugetNuspecHandler * WindowsExecutableHandler * MicrosoftUpdateManifestHandler * InstalledProgramFromDockerSoftwareDeltaHandler * InstalledProgramFromDockerFilesSoftwareHandler * InstalledProgramFromDockerUtilityvmSoftwareHandler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/msi.py | 66 +- src/packagedcode/nuget.py | 151 ++--- src/packagedcode/win_pe.py | 103 ++- src/packagedcode/win_reg.py | 422 ++++++------ src/packagedcode/windows.py | 60 +- .../nuget/Castle.Core.nuspec.json.expected | 7 +- .../EntityFramework.nuspec.json.expected | 7 +- .../Microsoft.AspNet.Mvc.nuspec.json.expected | 7 +- .../Microsoft.Net.Http.nuspec.json.expected | 7 +- .../data/nuget/bootstrap.nuspec.json.expected | 7 +- .../jQuery.UI.Combined.nuspec.json.expected | 7 +- ...eLibrary.Caching.dll.package-expected.json | 9 +- .../Moq.Silverlight.dll.package-expected.json | 9 +- .../Windows.AI.winmd.package-expected.json | 9 +- .../_ctypes_test.pyd.package-expected.json | 9 +- .../win_pe/chcp.com.package-expected.json | 9 +- .../win_pe/clfs.sys.mui.package-expected.json | 9 +- .../crypt32.dll.mun.package-expected.json | 9 +- .../win_pe/euc-jp.so.package-expected.json | 9 +- .../win_pe/file.exe.package-expected.json | 9 +- .../libiconv2.dll.package-expected.json | 9 +- .../win_pe/libintl3.dll.package-expected.json | 9 +- .../win_pe/stdole2.tlb.package-expected.json | 9 +- .../data/win_pe/tbs.sys.package-expected.json | 9 +- .../win_pe/tre4.dll.package-expected.json | 9 +- .../win_pe/zlib1.dll.package-expected.json | 9 +- .../SOFTWARE-dotnet-installation.expected | 24 +- .../SOFTWARE-installed-programs.expected | 636 ++++++++++++++++-- .../expected-results | 596 ++++++++++++---- .../expected-results.json | 150 +++++ .../data/windows/mum/test.mum.expected | 7 +- tests/packagedcode/test_msi.py | 26 +- tests/packagedcode/test_nuget.py | 26 +- tests/packagedcode/test_win_pe.py | 4 +- tests/packagedcode/test_win_reg.py | 34 +- tests/packagedcode/test_windows.py | 6 +- 36 files changed, 1713 insertions(+), 775 deletions(-) create mode 100644 tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results.json diff --git a/src/packagedcode/msi.py b/src/packagedcode/msi.py index 79f96b878cc..31deea3040b 100644 --- a/src/packagedcode/msi.py +++ b/src/packagedcode/msi.py @@ -12,15 +12,12 @@ import warnings from shutil import which -import attr - from commoncode.command import execute from commoncode.command import find_in_path from commoncode.system import on_linux from commoncode.version import VERSION_PATTERNS_REGEX from packagedcode import models - MSIINFO_BIN_LOCATION = 'packagedcode_msitools.msiinfo' @@ -91,6 +88,7 @@ def get_msi_info(location): installing the `packagedcode-msiinfo` plugin or by installing `msitools` through a package manager. """ + # FIXME: what about the return code? we ignore it? rc, stdout, stderr = execute( cmd_loc=get_msiinfo_bin_location(), args=[ @@ -98,9 +96,8 @@ def get_msi_info(location): location, ], ) - if stderr: - error_message = f'Error encountered when reading MSI information from {location}: ' - error_message = error_message + stderr + if stderr or rc: + error_message = f'Error encountered when reading MSI information from {location}: {stderr}' raise MsiinfoException(error_message) return parse_msiinfo_suminfo_output(stdout) @@ -123,11 +120,15 @@ def get_version_from_subject_line(subject_line): return v -def create_package_from_msiinfo_results(msiinfo_results): +def create_package_data_from_msiinfo_results( + msiinfo_results, + datasource_id='msi_installer', + package_type='msi', +): """ - Return an MsiInstallerPackage from the dictionary `msiinfo_results` + Return PackageData from a mapping of `msiinfo_results` """ - author_name = msiinfo_results.get('Author', '') + author_name = msiinfo_results.pop('Author', '') parties = [] if author_name: parties.append( @@ -143,13 +144,15 @@ def create_package_from_msiinfo_results(msiinfo_results): # the time. Getting the version out of the `Subject` string is not # straightforward because the format of the string is usually different # between different MSIs - subject = msiinfo_results.get('Subject', '') + subject = msiinfo_results.pop('Subject', '') name = subject version = get_version_from_subject_line(subject) - description = msiinfo_results.get('Comments', '') - keywords = msiinfo_results.get('Keywords', '') + description = msiinfo_results.pop('Comments', '') + keywords = msiinfo_results.pop('Keywords', []) - return MsiInstallerPackage( + return models.PackageData( + datasource_id=datasource_id, + type=package_type, name=name, version=version, description=description, @@ -159,22 +162,35 @@ def create_package_from_msiinfo_results(msiinfo_results): ) -def msi_parse(location): +def msi_parse(location, + datasource_id='msi_installer', + package_type='msi', +): """ - Return an MsiInstallerPackage from `location` + Return PackageData from ``location`` """ - info = get_msi_info(location) - return create_package_from_msiinfo_results(info) + if on_linux: + info = get_msi_info(location) + return create_package_data_from_msiinfo_results( + msiinfo_results=info, + datasource_id=datasource_id, + package_type=package_type, + ) + else: + return models.PackageData( + datasource_id=datasource_id, + type=package_type, + ) -@attr.s() -class MsiInstallerPackage(models.PackageData, models.PackageDataFile): +class MsiInstallerHandler(models.DatafileHandler): + datasource_id = 'msi_installer' filetypes = ('msi installer',) - mimetypes = ('application/x-msi',) - extensions = ('.msi',) - default_type = 'msi' + path_patterns = ('*.msi',) + default_package_type = 'msi' + description = 'Microsoft MSI installer' + documentation_url = 'https://docs.microsoft.com/en-us/windows/win32/msi/windows-installer-portal' @classmethod - def recognize(cls, location): - if on_linux: - yield msi_parse(location) + def parse(cls, location): + yield msi_parse(location) diff --git a/src/packagedcode/nuget.py b/src/packagedcode/nuget.py index 81da5719706..b828d4ab9e8 100644 --- a/src/packagedcode/nuget.py +++ b/src/packagedcode/nuget.py @@ -7,127 +7,58 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import attr import xmltodict -from commoncode import filetype from packagedcode import models from packagedcode.utils import build_description - -# TODO: add dependencies - """ -Handle nuget.org Nuget packages. +Handle NuGet packages and their manifests. """ +# TODO: add dependencies -# Tracing flags -TRACE = False - - -def logger_debug(*args): - pass - - -if TRACE: - import logging - import sys - logger = logging.getLogger(__name__) - # logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) +def get_urls(name, version): + return dict( + repository_homepage_url=f'https://www.nuget.org/packages/{name}/{version}', + repository_download_url=f'https://www.nuget.org/api/v2/package/{name}/{version}', + # the name is lowercased as in + # https://api.nuget.org/v3/registration3/newtonsoft.json/10.0.1.json + api_data_url=f'https://api.nuget.org/v3/registration3/{name.lower()}/{version}.json', + ) -@attr.s() -class NugetPackageData(models.PackageData): - # file_patterns = ('[Content_Types].xml', '*.nuspec',) +class NugetNupkgHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'nuget_nupkg' + path_patterns = ('*.nupkg',) + default_package_type = 'nuget' filetypes = ('zip archive', 'microsoft ooxml',) - mimetypes = ('application/zip', 'application/octet-stream',) - # extensions = ('.nupkg',) - - default_type = 'nuget' - default_web_baseurl = 'https://www.nuget.org/packages/' - default_download_baseurl = 'https://www.nuget.org/api/v2/package/' - default_api_baseurl = 'https://api.nuget.org/v3/registration3/' + description = 'NuGet nupkg package archive' + documentation_url = 'https://en.wikipedia.org/wiki/Open_Packaging_Conventions' - @classmethod - def get_package_root(cls, manifest_resource, codebase): - if manifest_resource.name.endswith('.nupkg'): - return manifest_resource - if manifest_resource.name.endswith(('[Content_Types].xml', '.nuspec',)): - return manifest_resource.parent(codebase) - return manifest_resource - - def repository_homepage_url(self, baseurl=default_web_baseurl): - return baseurl + '{name}/{version}'.format( - name=self.name, version=self.version) - - def repository_download_url(self, baseurl=default_download_baseurl): - return baseurl + '{name}/{version}'.format( - name=self.name, version=self.version) - - def api_data_url(self, baseurl=default_api_baseurl): - # the name is lowercased - # https://api.nuget.org/v3/registration3/newtonsoft.json/10.0.1.json - return baseurl + '{name}/{version}.json'.format( - name=self.name.lower(), version=self.version) - - -nuspec_tags = [ - 'id', - 'version', - 'title', - 'authors', - 'owners', - 'licenseUrl', - 'projectUrl', - 'requireLicenseAcceptance', - 'description', - 'summary', - 'releaseNotes', - 'copyright', - 'repository/@type', - 'repository/@url', -] - - -@attr.s() -class Nuspec(NugetPackageData, models.PackageDataFile): - - file_patterns = ('*.nuspec',) - extensions = ('.nuspec',) - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.nuspec') +class NugetNuspecHandler(models.DatafileHandler): + datasource_id = 'nuget_nupsec' + path_patterns = ('*.nuspec',) + default_package_type = 'nuget' + description = 'NuGet nuspec package manifest' + documentation_url = 'https://docs.microsoft.com/en-us/nuget/reference/nuspec' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with open(location , 'rb') as loc: parsed = xmltodict.parse(loc) - if TRACE: - logger_debug('parsed:', parsed) if not parsed: return - pack = parsed.get('package', {}) or {} + pack = parsed.get('package') or {} nuspec = pack.get('metadata') if not nuspec: return - name=nuspec.get('id') - version=nuspec.get('version') + name = nuspec.get('id') + version = nuspec.get('version') # Summary: A short description of the package for UI display. If omitted, a # truncated version of description is used. @@ -149,37 +80,35 @@ def recognize(cls, location): if owners: parties.append(models.Party(name=owners, role='owner')) + vcs_url = None + repo = nuspec.get('repository') or {} - vcs_tool = repo.get('@type') or '' vcs_repository = repo.get('@url') or '' - vcs_url =None if vcs_repository: + vcs_tool = repo.get('@type') or '' if vcs_tool: - vcs_url = '{}+{}'.format(vcs_tool, vcs_repository) + vcs_url = f'{vcs_tool}+{vcs_repository}' else: vcs_url = vcs_repository - yield cls( + urls = get_urls(name, version) + + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, description=description or None, homepage_url=nuspec.get('projectUrl') or None, parties=parties, + # FIXME: license has evolved and is now SPDX... declared_license=nuspec.get('licenseUrl') or None, copyright=nuspec.get('copyright') or None, vcs_url=vcs_url, + **urls, ) + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = cls.compute_normalized_license(package_data) -@attr.s() -class NugetPackage(NugetPackageData, models.Package): - """ - A Nuget Package that is created out of one/multiple nuget package - manifests. - """ - - @property - def manifests(self): - return [ - Nuspec - ] + yield package_data diff --git a/src/packagedcode/win_pe.py b/src/packagedcode/win_pe.py index a00c021b42c..0420c9b0eaa 100644 --- a/src/packagedcode/win_pe.py +++ b/src/packagedcode/win_pe.py @@ -9,17 +9,15 @@ from contextlib import closing -import attr -from ftfy import fix_text import pefile +from ftfy import fix_text -from commoncode import filetype from commoncode import text -from typecode import contenttype from packagedcode import models from packagedcode.models import Party from packagedcode.models import party_org +from typecode import contenttype TRACE = False @@ -149,11 +147,6 @@ def pe_info(location): if not location: return {} - T = contenttype.get_type(location) - - if not T.is_winexe: - return {} - result = dict([(k, None,) for k in PE_INFO_KEYS]) extra_data = result['extra_data'] = {} @@ -221,19 +214,6 @@ def pe_info(location): return result -@attr.s() -class WindowsExecutableData(models.PackageData): - - filetypes = ('pe32', 'for ms windows',) - mimetypes = ('application/x-dosexec',) - - default_type = 'winexe' - - default_web_baseurl = None - default_download_baseurl = None - default_api_baseurl = None - - def get_first(mapping, *keys): """ Return the first value of the `keys` that is found in the `mapping`. @@ -257,41 +237,46 @@ def concat(mapping, *keys): return '\n'.join(values) -@attr.s() -class WindowsExecutable(WindowsExecutableData, models.PackageDataFile): - extensions = ( - '.exe', - '.dll', - '.mui', - '.mun', - '.com', - '.winmd', - '.sys', - '.tlb', - '.exe_*', - '.dll_*', - '.mui_*', - '.mun_*', - '.com_*', - '.winmd_*', - '.sys_*', - '.tlb_*', +class WindowsExecutableHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'windows_executable' + default_package_type = 'winexe' + filetypes = ('pe32', 'for ms windows',) + path_patterns = ( + '*.exe', + '*.dll', + '*.mui', + '*.mun', + '*.com', + '*.winmd', + '*.sys', + '*.tlb', + '*.exe_*', + '*.dll_*', + '*.mui_*', + '*.mun_*', + '*.com_*', + '*.winmd_*', + '*.sys_*', + '*.tlb_*', + '*.ocx', ) + description = 'Windows Portable Executable metadata' + documentation_url = 'https://en.wikipedia.org/wiki/Portable_Executable' @classmethod - def is_package_data_file(cls, location): + def is_datafile(cls, location, filetypes=tuple()): """ - Return True if the file at ``location`` is likely a manifest of this type. + Return True if the file at location is highly likely to be a POM. """ + if super().is_datafile(location, filetypes=filetypes): + return True + T = contenttype.get_type(location) - return filetype.is_file(location) and T.is_winexe + if T.is_winexe: + return True @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): infos = pe_info(location) version = get_first( @@ -343,7 +328,9 @@ def recognize(cls, location): parties = [Party(type=party_org, role='author', name=cname)] homepage_url = get_first(infos, 'URL', 'WWW') - yield cls( + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, release_date=release_date, @@ -354,17 +341,7 @@ def recognize(cls, location): homepage_url=homepage_url, ) + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) -@attr.s() -class WindowsPackage(WindowsExecutableData, models.Package): - """ - A Windows Package that is created out of one/multiple windows package - manifests. - """ - - @property - def manifests(self): - return [ - WindowsExecutable - ] - + yield package_data diff --git a/src/packagedcode/win_reg.py b/src/packagedcode/win_reg.py index 1115c8bfbed..e32d579a117 100644 --- a/src/packagedcode/win_reg.py +++ b/src/packagedcode/win_reg.py @@ -12,6 +12,7 @@ from pathlib import PureWindowsPath import attr + try: from regipy.exceptions import NoRegistrySubkeysException from regipy.exceptions import RegistryKeyNotFoundException @@ -21,74 +22,68 @@ from packagedcode import models - -# Tracing flags -TRACE = False - - -def logger_debug(*args): - pass - - -if TRACE: - import sys - import logging - - logger = logging.getLogger(__name__) - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) - and a or repr(a) for a in args)) - - # TODO: Find "boilerplate" files, what are the things that we do not care about, e.g. thumbs.db # TODO: check for chocolatey # TODO: Windows appstore + def get_registry_name_key_entry(registry_hive, registry_path): """ - Given a RegistryHive `registry_hive`, return the name key entry for - `registry_path` from `registry_hive` - - Return if the registry path cannot be found. + Return the "name" key entry for ```registry_path`` from the ```registry_hive`` + RegistryHive. Return None if the ``registry_path`` is not found. """ try: - name_key_entry = registry_hive.get_key(registry_path) - except (RegistryKeyNotFoundException, NoRegistrySubkeysException) as ex: - if TRACE: - logger_debug('Did not find the key: {}'.format(ex)) + return registry_hive.get_key(registry_path) + except (RegistryKeyNotFoundException, NoRegistrySubkeysException): return - return name_key_entry def get_registry_tree(registry_location, registry_path): """ - Return a list of dictionaries of Window registry entries found under a given - registry path + Return a list of dictionaries of Window registry entries from the hive at + ``registry_location`` found under a given ``registry_path``. """ registry_hive = RegistryHive(registry_location) name_key_entry = get_registry_name_key_entry( - registry_hive=registry_hive, - registry_path=registry_path + registry_hive=registry_hive, registry_path=registry_path ) if not name_key_entry: return [] - return [attr.asdict(entry) for entry in registry_hive.recurse_subkeys(name_key_entry, as_json=True)] + return [ + attr.asdict(entry) for entry in registry_hive.recurse_subkeys(name_key_entry, as_json=True) + ] -def report_installed_dotnet_versions(location, registry_path='\\Microsoft\\NET Framework Setup\\NDP'): +def get_installed_dotnet_versions_from_hive( + location, + datasource_id, + package_type, + registry_path='\\Microsoft\\NET Framework Setup\\NDP', +): """ - Yield the installed versions of .NET framework from `location`. The logic to - retrieve installed .NET version has been outlined here: + Yield PackageData for the installed versions of .NET framework from the + registry hive at ``location``. + + The logic to retrieve installed .NET version has been outlined here: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed """ - registry_tree = get_registry_tree(location, registry_path) - return _report_installed_dotnet_versions(registry_tree) + registry_tree = get_registry_tree(registry_location=location, registry_path=registry_path) + yield from get_installed_dotnet_versions_from_regtree( + registry_tree=registry_tree, + datasource_id=datasource_id, + package_type=package_type, + ) -def _report_installed_dotnet_versions(registry_tree): +def get_installed_dotnet_versions_from_regtree( + registry_tree, + datasource_id, + package_type, +): + """ + Yield PackageData for the installed versions of .NET framework from a + Windows ``registry_tree``. + """ if not registry_tree: return @@ -98,80 +93,84 @@ def _report_installed_dotnet_versions(registry_tree): if not entry.get('path', '').endswith('\\Full'): continue - dotnet_info = {} - for dotnet_info_value in entry.get('values', []): - dotnet_info_value_name = dotnet_info_value.get('name') - dotnet_info_value_value = dotnet_info_value.get('value') - if dotnet_info_value_name == 'Version': - dotnet_info['version'] = dotnet_info_value_value - if dotnet_info_value_name == 'InstallPath': - dotnet_info['InstallPath'] = dotnet_info_value_value - - version = dotnet_info.get('version') - if not version: - continue - - install_path = dotnet_info.get('InstallPath') - extra_data = {} - if install_path: - extra_data['install_location'] = install_path - - # Yield package - yield InstalledWindowsProgram( - name='Microsoft .NET Framework', + file_references = [] + version = None + for values in entry.get('values', []): + key = values.get('name') + value = values.get('value') + + if key == 'Version': + version = value + if key == 'InstallPath': + file_references.append(models.FileReference(path=value)) + + yield models.PackageData( + datasource_id=datasource_id, + type=package_type, + name='microsoft-dot-net-framework', version=version, - extra_data=extra_data, + file_references=file_references, ) -def report_installed_programs(location, registry_path='\\Microsoft\\Windows\\CurrentVersion\\Uninstall'): +def get_installed_windows_programs_from_hive( + location, + datasource_id, + package_type, + registry_path='\\Microsoft\\Windows\\CurrentVersion\\Uninstall', +): """ - Yield installed Windows packages from a Windows registry file at `location`. + Yield installed Windows PackageData from a Windows registry file at + ``location``. + This is done by looking at the entries of the uninstallable programs list. - If `registry_path` is provided, then we will load Registry entries starting - from `registry_path` + If ``registry_path`` is provided, then we will load Registry entries + starting from ``registry_path`` """ - registry_tree = get_registry_tree(location, registry_path) - return _report_installed_programs(registry_tree) + registry_tree = get_registry_tree(registry_location=location, registry_path=registry_path) + yield from get_installed_windows_programs_from_regtree( + registry_tree=registry_tree, + datasource_id=datasource_id, + package_type=package_type, + ) -def _report_installed_programs(registry_tree): +def get_installed_windows_programs_from_regtree( + registry_tree, + datasource_id, + package_type, +): + """ + Yield installed Windows PackageData from a Windows ``registry_tree``. + """ if not registry_tree: return - # Collect Package information and create Package if we have a valid Package name + field_by_regkey = { + 'DisplayName': 'name', + 'DisplayVersion': 'version', + 'URLInfoAbout': 'homepage_url', + 'Publisher': 'publisher', + 'DisplayIcon': 'display_icon', + 'UninstallString': 'uninstall_string', + 'InstallLocation': 'install_location', + } + for entry in registry_tree: package_info = {} for entry_value in entry.get('values', []): - name = entry_value.get('name') + key = entry_value.get('name') value = entry_value.get('value') - - if name == 'DisplayName': - package_info['name'] = value - if name == 'DisplayVersion': - package_info['version'] = value - if name == 'InstallLocation': - package_info['install_location'] = value - if name == 'Publisher': - package_info['publisher'] = value - if name == 'URLInfoAbout': - package_info['homepage_url'] = value - if name == 'DisplayIcon': - package_info['DisplayIcon'] = value - if name == 'UninstallString': - package_info['UninstallString'] = value + pkg_field = field_by_regkey.get(key) + if pkg_field: + package_info[pkg_field] = value name = package_info.get('name') - if not name: - continue - version = package_info.get('version') + homepage_url = package_info.get('homepage_url') - install_location = package_info.get('install_location') publisher = package_info.get('publisher') - display_icon = package_info.get('DisplayIcon') - uninstall_string = package_info.get('UninstallString') parties = [] if publisher: @@ -179,85 +178,91 @@ def _report_installed_programs(registry_tree): models.Party( type=models.party_org, role='publisher', - name=publisher + name=publisher, ) ) - known_program_files = [] + file_references = [] + install_location = package_info.get('install_location') + if install_location: + file_references.append(models.FileReference(path=install_location)) + + display_icon = package_info.get('display_icon') if display_icon: - known_program_files.append(display_icon) - if uninstall_string: - known_program_files.append(uninstall_string) + file_references.append(models.FileReference(path=display_icon)) - extra_data = {} - if install_location: - extra_data['install_location'] = install_location - if known_program_files: - extra_data['known_program_files'] = known_program_files + uninstall_string = package_info.get('uninstall_string') + if uninstall_string: + file_references.append(models.FileReference(path=uninstall_string)) - yield InstalledWindowsProgram( + yield models.PackageData( + datasource_id=datasource_id, + type=package_type, name=name, version=version, parties=parties, homepage_url=homepage_url, - extra_data=extra_data + file_references=file_references, ) -def reg_parse(location): +def get_packages_from_registry_from_hive( + location, + datasource_id, + package_type, +): """ - Yield InstalledWindowsPrograms from `location` using - `report_installed_programs` and `report_installed_dotnet_versions` + Yield PackageData for Installed Windows Programs from the Windows registry + hive at ``location`` """ - for installed_program in report_installed_programs(location): - yield installed_program - for installed_program in report_installed_programs( - location, - registry_path='\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall' - ): - yield installed_program - for installed_dotnet in report_installed_dotnet_versions(location): - yield installed_dotnet + yield from get_installed_windows_programs_from_hive( + location=location, + datasource_id=datasource_id, + package_type=package_type, + registry_path='\\Microsoft\\Windows\\CurrentVersion\\Uninstall', + ) + + yield from get_installed_windows_programs_from_hive( + location=location, + datasource_id=datasource_id, + package_type=package_type, + registry_path='\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall', + ) + + yield from get_installed_dotnet_versions_from_hive( + location=location, + datasource_id=datasource_id, + package_type=package_type, + registry_path='\\Microsoft\\NET Framework Setup\\NDP', + ) def get_installed_packages(root_dir, is_container=True): """ - Yield InstalledWindowsProgram objects for every detected installed program - from Windows registry files in known locations + Yield PackageData for Installed Windows Programs for every detected + installed program from Windows registry hive files found in well known + locations under a ``root_dir`` root filesystem directory. """ # These paths are relative to a Windows docker image layer root directory if is_container: - hives_software_delta_loc = os.path.join(root_dir, 'Hives', 'Software_Delta') - files_software_loc = os.path.join( - root_dir, - 'Files', - 'Windows', - 'System32', - 'config', - 'SOFTWARE' - ) + hives_software_delta_loc = os.path.join(root_dir, 'Hives/Software_Delta') + files_software_loc = os.path.join(root_dir, 'Files/Windows/System32/config/SOFTWARE') utilityvm_software_loc = os.path.join( - root_dir, - 'UtilityVM', - 'Files', - 'Windows', - 'System32', - 'config', - 'SOFTWARE' + root_dir, 'UtilityVM/Files/Windows/System32/config/SOFTWARE' ) - root_prefixes_by_software_registry_locations = { + root_prefixes_by_software_reg_locations = { hives_software_delta_loc: 'Files', files_software_loc: 'Files', - utilityvm_software_loc: os.path.join('UtilityVM', 'Files') + utilityvm_software_loc: 'UtilityVM/Files', } else: # TODO: Add support for virtual machines raise Exception('Unsuported file system type') - for software_registry_loc, root_prefix in root_prefixes_by_software_registry_locations.items(): - if not os.path.exists(software_registry_loc): + for software_reg_loc, root_prefix in root_prefixes_by_software_reg_locations.items(): + if not os.path.exists(software_reg_loc): continue - for package in reg_parse(software_registry_loc): + for package in get_packages_from_registry_from_hive(software_reg_loc): package.populate_installed_files(root_dir, root_prefix=root_prefix) yield package @@ -308,60 +313,101 @@ def create_relative_file_path(file_path, root_dir, root_prefix=''): return relative_file_path -@attr.s() -class InstalledWindowsProgram(models.PackageData, models.PackageDataFile): - default_type = 'windows-program' +class BaseRegInstalledProgramHandler(models.DatafileHandler): + default_package_type = 'windows-program' + documentation_url = 'https://en.wikipedia.org/wiki/Windows_Registry' + + # The rootfs location (of a Docker image layer) can be in a + # subdirectory of the layer tree. This is a path to the root of the windows filesystem relative to the + # datafile (e.g. the registry hive file) + + root_path_relative_to_datafile_path = None + + @classmethod + def parse(cls, location): + yield from get_packages_from_registry_from_hive( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def get_root_resource(cls, resource, codebase): + """ + Return the root Resource given a datafile ``resource`` in ``codebase``. + """ + segments = cls.root_path_relative_to_datafile_path.split('/') + + for segment in segments: + if segment == '..': + resource = resource.parent(codebase) + else: + ress = [r for r in resource.children(codebase) if r.name == segment] + if not len(ress) == 1: + return + resource = ress[0] + + if not resource: + return + return resource @classmethod - def recognize(cls, location): - for installed in reg_parse(location): - yield installed + def assign_package_to_resources(cls, package, resource, codebase): + package_uid = package.package_uid + resource.for_packages.append(package_uid) + resource.save(codebase) - def populate_installed_files(self, root_dir, root_prefix=''): - install_location = self.extra_data.get('install_location') - if not install_location: + refs = package.file_references + if not refs: return - if root_prefix: - # The rootfs location of a Docker image layer can be in a - # subdirectory of the layer directory (where `root_dir` is the path - # to the layer directory), so we append `root_prefix` (where prefix - # is relative to the file paths within the Docker image layer's - # rootfs files) to `root_dir` - root_dir = os.path.join(root_dir, root_prefix) - - absolute_install_location = create_absolute_installed_file_path( - root_dir=root_dir, - file_path=install_location - ) - if not os.path.exists(absolute_install_location): + root = cls.get_root_resource(resource, codebase) + if not root: + # FIXME: this should not happen return - installed_files = [] - for root, _, files in os.walk(absolute_install_location): - for file in files: - installed_file_location = os.path.join(root, file) - relative_installed_file_path = create_relative_file_path( - file_path=installed_file_location, - root_dir=root_dir, - root_prefix=root_prefix - ) - installed_files.append(relative_installed_file_path) + root_path = Path(root.path) - known_program_files = self.extra_data.get('known_program_files', []) - for known_program_file_path in known_program_files: - known_program_file_location = create_absolute_installed_file_path( - root_dir=root_dir, - file_path=known_program_file_path, - ) - relative_known_file_path = create_relative_file_path( - file_path=known_program_file_location, - root_dir=root_dir, - root_prefix=root_prefix - ) - if (not os.path.exists(known_program_file_location) - or relative_known_file_path in installed_files): + refs_by_path = {} + for ref in refs: + # a file ref may be a Windows path with a drive + ref_path = remove_drive_letter(ref.path) + # a file ref extends from the root of the Windows filesystem + refs_by_path[str(root_path / ref_path)] = ref + + for res in root.walk(codebase): + ref = refs_by_path.get(res.path) + if not ref: continue - installed_files.append(relative_known_file_path) - self.installed_files = [models.PackageFile(path=path) for path in sorted(installed_files)] + # path is found and processed: remove it, so we can check if we + # found all of them + del refs_by_path[res.path] + res.for_packages.append(package_uid) + res.save(codebase) + + # if we have left over file references, add these to extra data + if refs_by_path: + missing = sorted(refs_by_path.values(), key=lambda r: r.path) + package.extra_data['missing_file_references'] = missing + + +class InstalledProgramFromDockerSoftwareDeltaHandler(BaseRegInstalledProgramHandler): + datasource_id = 'win_reg_installed_programs_docker_software_delta' + path_patterns = ('*/Hives/Software_Delta',) + description = 'Windows Registry Installed Program - Docker Software Delta' + root_path_relative_to_datafile_path = '../../Files' + + +class InstalledProgramFromDockerFilesSoftwareHandler(BaseRegInstalledProgramHandler): + datasource_id = 'win_reg_installed_programs_docker_file_software' + path_patterns = ('*/Files/Windows/System32/config/SOFTWARE',) + description = 'Windows Registry Installed Program - Docker SOFTWARE' + root_path_relative_to_datafile_path = '../../../..' + + +class InstalledProgramFromDockerUtilityvmSoftwareHandler(BaseRegInstalledProgramHandler): + datasource_id = 'win_reg_installed_programs_docker_utility_software' + path_patterns = ('*/UtilityVM/Files/Windows/System32/config/SOFTWARE',) + description = 'Windows Registry Installed Program - Docker UtilityVM SOFTWARE' + root_path_relative_to_datafile_path = '../../../..' diff --git a/src/packagedcode/windows.py b/src/packagedcode/windows.py index b7cb7a9f406..09d62f4c2d9 100644 --- a/src/packagedcode/windows.py +++ b/src/packagedcode/windows.py @@ -7,70 +7,30 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import attr import xmltodict from packagedcode import models -from commoncode import filetype -# Tracing flags -TRACE = False - - -def logger_debug(*args): - pass - - -if TRACE: - import logging - import sys - logger = logging.getLogger(__name__) - # logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - - -@attr.s() -class MicrosoftUpdatePackage(models.PackageData): - extensions = ('.mum',) +class MicrosoftUpdateManifestHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'microsoft_update_manifest_mum' + path_patterns = ('*.mum',) filetypes = ('xml 1.0 document',) - mimetypes = ('text/xml',) - - default_type = 'windows-update' - - -@attr.s() -class MicrosoftUpdateManifest(MicrosoftUpdatePackage, models.PackageDataFile): - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.mum') + default_package_type = 'windows-update' + description = 'Microsoft Update Manifest .mum file' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with open(location , 'rb') as loc: parsed = xmltodict.parse(loc) - if TRACE: - logger_debug('parsed:', parsed) if not parsed: return assembly = parsed.get('assembly', {}) description = assembly.get('@description', '') company = assembly.get('@company', '') - copyright = assembly.get('@copyright', '') + copyrght = assembly.get('@copyright', '') support_url = assembly.get('@supportInformation', '') assembly_identity = assembly.get('assemblyIdentity', {}) @@ -87,11 +47,13 @@ def recognize(cls, location): ) ) - yield cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, description=description, homepage_url=support_url, parties=parties, - copyright=copyright, + copyright=copyrght, ) diff --git a/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected b/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected index 8a5174739c3..eb095a973b8 100644 --- a/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Castle.Core.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "apache-2.0", "declared_license": "http://www.apache.org/licenses/LICENSE-2.0.html", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/Castle.Core@4.2.1", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/castle.core/4.2.1.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/Castle.Core@4.2.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/nuget/EntityFramework.nuspec.json.expected b/tests/packagedcode/data/nuget/EntityFramework.nuspec.json.expected index 03a45e40d7a..2db275ccaf1 100644 --- a/tests/packagedcode/data/nuget/EntityFramework.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/EntityFramework.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "ms-net-library", "declared_license": "http://go.microsoft.com/fwlink/?LinkID=320539", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/EntityFramework@6.1.3", "repository_homepage_url": "https://www.nuget.org/packages/EntityFramework/6.1.3", "repository_download_url": "https://www.nuget.org/api/v2/package/EntityFramework/6.1.3", - "api_data_url": "https://api.nuget.org/v3/registration3/entityframework/6.1.3.json" + "api_data_url": "https://api.nuget.org/v3/registration3/entityframework/6.1.3.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/EntityFramework@6.1.3" } ] \ No newline at end of file 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 3543c2d42c8..422d25431e7 100644 --- a/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Microsoft.AspNet.Mvc.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "ms-net-library", "declared_license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/Microsoft.AspNet.Mvc@6.0.0-beta7", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/microsoft.aspnet.mvc/6.0.0-beta7.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/Microsoft.AspNet.Mvc@6.0.0-beta7" } ] \ No newline at end of file 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 54b26a8a06d..e146ff270a7 100644 --- a/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/Microsoft.Net.Http.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "ms-net-library-2018-11", "declared_license": "http://go.microsoft.com/fwlink/?LinkId=329770", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/Microsoft.Net.Http@2.2.29", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/microsoft.net.http/2.2.29.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/Microsoft.Net.Http@2.2.29" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected b/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected index c5d6b458171..dc4b8e15b39 100644 --- a/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/bootstrap.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "mit", "declared_license": "https://github.com/twbs/bootstrap/blob/master/LICENSE", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/bootstrap@4.0.0-alpha", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/bootstrap/4.0.0-alpha.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/bootstrap@4.0.0-alpha" } ] \ No newline at end of file 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 b99a0e17402..5cca7b21905 100644 --- a/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected +++ b/tests/packagedcode/data/nuget/jQuery.UI.Combined.nuspec.json.expected @@ -40,13 +40,14 @@ "license_expression": "mit", "declared_license": "http://jquery.org/license", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/jQuery.UI.Combined@1.11.4", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/jquery.ui.combined/1.11.4.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/jQuery.UI.Combined@1.11.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/Microsoft.Practices.EnterpriseLibrary.Caching.dll.package-expected.json b/tests/packagedcode/data/win_pe/Microsoft.Practices.EnterpriseLibrary.Caching.dll.package-expected.json index c4f57ccca8e..fa6fe5c208b 100644 --- a/tests/packagedcode/data/win_pe/Microsoft.Practices.EnterpriseLibrary.Caching.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/Microsoft.Practices.EnterpriseLibrary.Caching.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": null, "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%20Enterprise%20Library%20for%20.NET@2.0.0.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%20Enterprise%20Library%20for%20.NET@2.0.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/Moq.Silverlight.dll.package-expected.json b/tests/packagedcode/data/win_pe/Moq.Silverlight.dll.package-expected.json index b1fee3d2afb..a907403474b 100644 --- a/tests/packagedcode/data/win_pe/Moq.Silverlight.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/Moq.Silverlight.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": null, "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Moq@4.2.1507.0118", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Moq@4.2.1507.0118" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/Windows.AI.winmd.package-expected.json b/tests/packagedcode/data/win_pe/Windows.AI.winmd.package-expected.json index 24dc9d8bc33..a3bcd40c65a 100644 --- a/tests/packagedcode/data/win_pe/Windows.AI.winmd.package-expected.json +++ b/tests/packagedcode/data/win_pe/Windows.AI.winmd.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Windows%20SDK@10.0.10011.16384", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Windows%20SDK@10.0.10011.16384" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/_ctypes_test.pyd.package-expected.json b/tests/packagedcode/data/win_pe/_ctypes_test.pyd.package-expected.json index 372748ae60d..14f302509dd 100644 --- a/tests/packagedcode/data/win_pe/_ctypes_test.pyd.package-expected.json +++ b/tests/packagedcode/data/win_pe/_ctypes_test.pyd.package-expected.json @@ -22,20 +22,21 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": null, "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/chcp.com.package-expected.json b/tests/packagedcode/data/win_pe/chcp.com.package-expected.json index 32f31517819..550da546333 100644 --- a/tests/packagedcode/data/win_pe/chcp.com.package-expected.json +++ b/tests/packagedcode/data/win_pe/chcp.com.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/clfs.sys.mui.package-expected.json b/tests/packagedcode/data/win_pe/clfs.sys.mui.package-expected.json index e2a653d19a2..11ae86ef2d2 100644 --- a/tests/packagedcode/data/win_pe/clfs.sys.mui.package-expected.json +++ b/tests/packagedcode/data/win_pe/clfs.sys.mui.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/crypt32.dll.mun.package-expected.json b/tests/packagedcode/data/win_pe/crypt32.dll.mun.package-expected.json index 40aefa5e067..0bfa0a8ef8b 100644 --- a/tests/packagedcode/data/win_pe/crypt32.dll.mun.package-expected.json +++ b/tests/packagedcode/data/win_pe/crypt32.dll.mun.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/euc-jp.so.package-expected.json b/tests/packagedcode/data/win_pe/euc-jp.so.package-expected.json index 372748ae60d..14f302509dd 100644 --- a/tests/packagedcode/data/win_pe/euc-jp.so.package-expected.json +++ b/tests/packagedcode/data/win_pe/euc-jp.so.package-expected.json @@ -22,20 +22,21 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": null, "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/file.exe.package-expected.json b/tests/packagedcode/data/win_pe/file.exe.package-expected.json index aa55784da1c..7045c18415c 100644 --- a/tests/packagedcode/data/win_pe/file.exe.package-expected.json +++ b/tests/packagedcode/data/win_pe/file.exe.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2009 Ian F. Darwin", - "license_expression": null, + "license_expression": "bsd-simplified-darwin AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2009 Ian F. Darwin", "LegalTrademarks": "GnuWin32\u00ae, File\u00ae, file\u00ae", "License": "Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994-2004 Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/File@5.03.3414.16721", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/File@5.03.3414.16721" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/libiconv2.dll.package-expected.json b/tests/packagedcode/data/win_pe/libiconv2.dll.package-expected.json index 845f4ac0f3d..55f5f0e3a06 100644 --- a/tests/packagedcode/data/win_pe/libiconv2.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/libiconv2.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2004 Free Software Foundation ", - "license_expression": null, + "license_expression": "(lgpl-2.1 AND lgpl-2.1-plus) AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2004 Free Software Foundation ", "LegalTrademarks": "GNU\u00ae, LibIconv\u00ae, libiconv2\u00ae", "License": "This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License;see www.gnu.org/copyleft/lesser.html." }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/LibIconv@1.9.2.1519", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/LibIconv@1.9.2.1519" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/libintl3.dll.package-expected.json b/tests/packagedcode/data/win_pe/libintl3.dll.package-expected.json index 11dd55a1b76..fed506ddde3 100644 --- a/tests/packagedcode/data/win_pe/libintl3.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/libintl3.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2005 Free Software Foundation ", - "license_expression": null, + "license_expression": "gpl-2.0-plus AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2005 Free Software Foundation ", "LegalTrademarks": "GNU\u00ae, GetText\u00ae, libintl3\u00ae", "License": "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License;see www.gnu.org/copyleft/gpl.html." }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/GetText@0.14.4.1952", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/GetText@0.14.4.1952" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/stdole2.tlb.package-expected.json b/tests/packagedcode/data/win_pe/stdole2.tlb.package-expected.json index 2c9fbe60004..664d34314be 100644 --- a/tests/packagedcode/data/win_pe/stdole2.tlb.package-expected.json +++ b/tests/packagedcode/data/win_pe/stdole2.tlb.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/tbs.sys.package-expected.json b/tests/packagedcode/data/win_pe/tbs.sys.package-expected.json index cfa541f1724..40fd4edd027 100644 --- a/tests/packagedcode/data/win_pe/tbs.sys.package-expected.json +++ b/tests/packagedcode/data/win_pe/tbs.sys.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": null, + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/tre4.dll.package-expected.json b/tests/packagedcode/data/win_pe/tre4.dll.package-expected.json index 4f84117df28..a79d04628af 100644 --- a/tests/packagedcode/data/win_pe/tre4.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/tre4.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2008 Ville Laurikari ", - "license_expression": null, + "license_expression": "(gpl-1.0-plus AND gpl-1.0-plus) AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2008 Ville Laurikari ", "LegalTrademarks": "GnuWin32\u00ae, Tre\u00ae, tre4\u00ae", "License": "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License; see www.gnu.org/copyleft/gpl.html." }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Tre@0.7.5.3276", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Tre@0.7.5.3276" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_pe/zlib1.dll.package-expected.json b/tests/packagedcode/data/win_pe/zlib1.dll.package-expected.json index fdb1fd0ead2..a880b2bafed 100644 --- a/tests/packagedcode/data/win_pe/zlib1.dll.package-expected.json +++ b/tests/packagedcode/data/win_pe/zlib1.dll.package-expected.json @@ -30,20 +30,21 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2006 Jean-loup Gailly , Mark Adler ", - "license_expression": null, + "license_expression": "zlib AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2006 Jean-loup Gailly , Mark Adler ", "LegalTrademarks": "GnuWin32\u00ae, Zlib\u00ae, zlib1\u00ae", "License": "(C) 1995-2002 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Zlib@1.2.3.2532", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Zlib@1.2.3.2532" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_reg/SOFTWARE-dotnet-installation.expected b/tests/packagedcode/data/win_reg/SOFTWARE-dotnet-installation.expected index dad19e54fe4..2f2cec4b621 100644 --- a/tests/packagedcode/data/win_reg/SOFTWARE-dotnet-installation.expected +++ b/tests/packagedcode/data/win_reg/SOFTWARE-dotnet-installation.expected @@ -2,7 +2,7 @@ { "type": "windows-program", "namespace": null, - "name": "Microsoft .NET Framework", + "name": "microsoft-dot-net-framework", "version": "4.8.04084", "qualifiers": {}, "subpath": null, @@ -25,16 +25,24 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "install_location": "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\" - }, + "file_references": [ + { + "path": "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Microsoft%20.NET%20Framework@4.8.04084", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/microsoft-dot-net-framework@4.8.04084" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_reg/SOFTWARE-installed-programs.expected b/tests/packagedcode/data/win_reg/SOFTWARE-installed-programs.expected index 1079510cd9f..c94da993282 100644 --- a/tests/packagedcode/data/win_reg/SOFTWARE-installed-programs.expected +++ b/tests/packagedcode/data/win_reg/SOFTWARE-installed-programs.expected @@ -1,4 +1,436 @@ [ + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null + }, { "type": "windows-program", "namespace": null, @@ -33,19 +465,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{351016A7-AED4-4824-8D2E-2F9ED497CF77}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{351016A7-AED4-4824-8D2E-2F9ED497CF77}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Tcl/Tk%20Support%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Tcl/Tk%20Support%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -81,19 +519,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{420E50F6-A8E8-4098-A321-7DF6B3C3BA82}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{420E50F6-A8E8-4098-A321-7DF6B3C3BA82}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Utility%20Scripts%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Utility%20Scripts%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -129,19 +573,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{6504EEE5-2172-4D34-A76D-0372356396B4}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{6504EEE5-2172-4D34-A76D-0372356396B4}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Add%20to%20Path%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Add%20to%20Path%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -177,19 +627,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{843C07B6-040E-4E83-B244-5383247D70AB}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{843C07B6-040E-4E83-B244-5383247D70AB}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Executables%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Executables%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -225,19 +681,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{AEE58901-97A1-422A-B964-4FD9BF3327B8}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{AEE58901-97A1-422A-B964-4FD9BF3327B8}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Development%20Libraries%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Development%20Libraries%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -273,19 +735,25 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{F4DC18F4-6323-4BE8-A322-38268831BC24}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{F4DC18F4-6323-4BE8-A322-38268831BC24}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Standard%20Library%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Standard%20Library%20%2864-bit%29@3.9.5150.0" }, { "type": "windows-program", @@ -321,18 +789,60 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "installed_files": [], - "extra_data": { - "known_program_files": [ - "MsiExec.exe /I{FBB6299D-CB58-4177-B6A0-63BFB1C8C3AE}" - ] - }, + "file_references": [ + { + "path": "MsiExec.exe /I{FBB6299D-CB58-4177-B6A0-63BFB1C8C3AE}", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": "pkg:windows-program/Python%203.9.5%20Core%20Interpreter%20%2864-bit%29@3.9.5150.0" + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-program/Python%203.9.5%20Core%20Interpreter%20%2864-bit%29@3.9.5150.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_file_software", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results b/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results index 762aea95bfb..52a2085571f 100644 --- a/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results +++ b/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results @@ -1,152 +1,452 @@ -[ - { - "type": "windows-program", - "namespace": null, - "name": "Test", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "publisher", - "name": "Test Publisher", - "email": null, - "url": null - } - ], - "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, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [ - { - "path": "Files/Program Files/Test/Test.dat", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "Files/Program Files/Test/Test.exe", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true }, - { - "path": "Files/Program Files/Test/Uninstall.exe", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 7 } - ], - "extra_data": { - "install_location": "C:\\Program Files\\Test\\", - "known_program_files": [ - "C:\\Program Files\\Test\\Test.exe", - "C:\\Program Files\\Test\\Uninstall.exe" - ] + } + ], + "dependencies": [], + "packages": [ + { + "type": "windows-program", + "namespace": null, + "name": "Test", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:windows-program/Test@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "layer/Hives/Software_Delta" + ], + "datasource_ids": [ + "win_reg_installed_programs_docker_software_delta" + ], + "purl": "pkg:windows-program/Test@0.0.1" }, - "dependencies": [], - "purl": "pkg:windows-program/Test@0.0.1", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - }, - { - "type": "windows-program", - "namespace": null, - "name": "Test2", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "publisher", - "name": "Test Publisher", - "email": null, - "url": null - } - ], - "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, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "installed_files": [ - { - "path": "Files/Program Files (x86)/Test2/Test2.dat", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "Files/Program Files (x86)/Test2/Test2.exe", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - }, - { - "path": "Files/Program Files (x86)/Test2/Uninstall.exe", - "size": 0, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null - } - ], - "extra_data": { - "install_location": "C:\\Program Files (x86)\\Test2\\", - "known_program_files": [ - "C:\\Program Files (x86)\\Test2\\Test2.exe", - "C:\\Program Files (x86)\\Test2\\Uninstall.exe" - ] + { + "type": "windows-program", + "namespace": null, + "name": "Test2", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:windows-program/Test2@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "layer/Hives/Software_Delta" + ], + "datasource_ids": [ + "win_reg_installed_programs_docker_software_delta" + ], + "purl": "pkg:windows-program/Test2@0.0.1" + } + ], + "files": [ + { + "path": "layer", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files (x86)", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files (x86)/Test2", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test2@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files (x86)/Test2/Test2.dat", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files (x86)/Test2/Test2.exe", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test2@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files (x86)/Test2/Uninstall.exe", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test2@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files/Test", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files/Test/Test.dat", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files/Test/Test.exe", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Files/Program Files/Test/Uninstall.exe", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:windows-program/Test@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "layer/Hives", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] }, - "dependencies": [], - "purl": "pkg:windows-program/Test2@0.0.1", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } -] \ No newline at end of file + { + "path": "layer/Hives/Software_Delta", + "type": "file", + "package_data": [ + { + "type": "windows-program", + "namespace": null, + "name": "Test", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "C:\\Program Files\\Test\\", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "C:\\Program Files\\Test\\Test.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "C:\\Program Files\\Test\\Uninstall.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_software_delta", + "purl": "pkg:windows-program/Test@0.0.1" + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_software_delta", + "purl": null + }, + { + "type": "windows-program", + "namespace": null, + "name": "Test2", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "C:\\Program Files (x86)\\Test2\\", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "C:\\Program Files (x86)\\Test2\\Test2.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "C:\\Program Files (x86)\\Test2\\Uninstall.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_software_delta", + "purl": "pkg:windows-program/Test2@0.0.1" + }, + { + "type": "windows-program", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "win_reg_installed_programs_docker_software_delta", + "purl": null + } + ], + "for_packages": [ + "pkg:windows-program/Test@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:windows-program/Test2@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results.json b/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results.json new file mode 100644 index 00000000000..b3b8a2165a2 --- /dev/null +++ b/tests/packagedcode/data/win_reg/get_installed_packages_docker/expected-results.json @@ -0,0 +1,150 @@ +[ + { + "type": "windows-program", + "namespace": null, + "name": "Test", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "Files/Program Files/Test/Test.dat", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + }, + { + "path": "Files/Program Files/Test/Test.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + }, + { + "path": "Files/Program Files/Test/Uninstall.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + } + ], + "extra_data": { + "install_location": "C:\\Program Files\\Test\\", + "known_program_files": [ + "C:\\Program Files\\Test\\Test.exe", + "C:\\Program Files\\Test\\Uninstall.exe" + ] + }, + "dependencies": [], + "purl": "pkg:windows-program/Test@0.0.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + }, + { + "type": "windows-program", + "namespace": null, + "name": "Test2", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "organization", + "role": "publisher", + "name": "Test Publisher", + "email": null, + "url": null + } + ], + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + { + "path": "Files/Program Files (x86)/Test2/Test2.dat", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + }, + { + "path": "Files/Program Files (x86)/Test2/Test2.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + }, + { + "path": "Files/Program Files (x86)/Test2/Uninstall.exe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null + } + ], + "extra_data": { + "install_location": "C:\\Program Files (x86)\\Test2\\", + "known_program_files": [ + "C:\\Program Files (x86)\\Test2\\Test2.exe", + "C:\\Program Files (x86)\\Test2\\Uninstall.exe" + ] + }, + "dependencies": [], + "purl": "pkg:windows-program/Test2@0.0.1", + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/windows/mum/test.mum.expected b/tests/packagedcode/data/windows/mum/test.mum.expected index 48c82fe0d2b..89256415443 100644 --- a/tests/packagedcode/data/windows/mum/test.mum.expected +++ b/tests/packagedcode/data/windows/mum/test.mum.expected @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-update/Package_1_for_KB4601060@10.0.3770.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "microsoft_update_manifest_mum", + "purl": "pkg:windows-update/Package_1_for_KB4601060@10.0.3770.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_msi.py b/tests/packagedcode/test_msi.py index 8a7f9b80fe8..9704628ddaa 100644 --- a/tests/packagedcode/test_msi.py +++ b/tests/packagedcode/test_msi.py @@ -13,11 +13,11 @@ from commoncode.system import on_linux +from packagedcode import models from packagedcode.models import Party -from packagedcode.msi import create_package_from_msiinfo_results -from packagedcode.msi import MsiInstallerPackage +from packagedcode.msi import create_package_data_from_msiinfo_results from packagedcode.msi import parse_msiinfo_suminfo_output - +from packagedcode.msi import MsiInstallerHandler from packages_test_utils import PackageTester @@ -43,15 +43,19 @@ class TestMsi(PackageTester): def test_msi_parse_msiinfo_suminfo_output(self): test_file = self.get_test_loc('msi/python-add-to-path-msiinfo-results.txt') - expected_loc = self.get_test_loc('msi/python-add-to-path-msiinfo-results.expected') with open(test_file) as f: msiinfo_results = f.read() result = parse_msiinfo_suminfo_output(msiinfo_results) - self.assertEqual(result, self.python_3_9_5_add_to_path_results) - def test_msi_create_package_from_msiinfo_results(self): - result = create_package_from_msiinfo_results(self.python_3_9_5_add_to_path_results) - expected = MsiInstallerPackage( + assert result == self.python_3_9_5_add_to_path_results + + def test_msi_create_package_data_from_msiinfo_results(self): + result = create_package_data_from_msiinfo_results( + self.python_3_9_5_add_to_path_results.copy() + ).to_dict() + expected = models.PackageData( + type=MsiInstallerHandler.default_package_type, + datasource_id=MsiInstallerHandler.datasource_id, name='Python 3.9.5 Add to Path (64-bit)', version='v 3.9.5', description='This installer database contains the logic and data required to install Python 3.9.5 Add to Path (64-bit).', @@ -63,6 +67,6 @@ def test_msi_create_package_from_msiinfo_results(self): ) ], keywords='Installer', - extra_data=self.python_3_9_5_add_to_path_results - ) - self.assertEqual(result, expected) + ).to_dict() + result['extra_data'] = {} + assert result == expected diff --git a/tests/packagedcode/test_nuget.py b/tests/packagedcode/test_nuget.py index 8a59222199f..37298a45c7e 100644 --- a/tests/packagedcode/test_nuget.py +++ b/tests/packagedcode/test_nuget.py @@ -19,40 +19,40 @@ class TestNuget(PackageTester): def test_nuspec_is_package_data_file(self): test_file = self.get_test_loc('nuget/bootstrap.nuspec') - assert nuget.Nuspec.is_package_data_file(test_file) + assert nuget.NugetNuspecHandler.is_datafile(test_file) def test_parse_creates_package_from_nuspec_bootstrap(self): test_file = self.get_test_loc('nuget/bootstrap.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/bootstrap.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_creates_package_from_nuspec_entity_framework(self): test_file = self.get_test_loc('nuget/EntityFramework.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/EntityFramework.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_creates_package_from_nuspec_jquery_ui(self): test_file = self.get_test_loc('nuget/jQuery.UI.Combined.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/jQuery.UI.Combined.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_creates_package_from_nuspec_microsoft_asp_mvc(self): test_file = self.get_test_loc('nuget/Microsoft.AspNet.Mvc.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/Microsoft.AspNet.Mvc.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_creates_package_from_nuspec(self): test_file = self.get_test_loc('nuget/Microsoft.Net.Http.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/Microsoft.Net.Http.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_as_package(self): test_file = self.get_test_loc('nuget/Castle.Core.nuspec') - package = nuget.Nuspec.recognize(test_file) + package = nuget.NugetNuspecHandler.parse(test_file) expected_loc = self.get_test_loc('nuget/Castle.Core.nuspec.json.expected') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) diff --git a/tests/packagedcode/test_win_pe.py b/tests/packagedcode/test_win_pe.py index 64d14ab3216..7da4f65f72b 100644 --- a/tests/packagedcode/test_win_pe.py +++ b/tests/packagedcode/test_win_pe.py @@ -39,7 +39,7 @@ def check_win_pe(self, test_file, regen=REGEN_TEST_FIXTURES): def test_gosum_is_package_data_file(self): test_file = self.get_test_loc('win_pe/_ctypes_test.pyd') - assert win_pe.WindowsExecutable.is_package_data_file(test_file) + assert win_pe.WindowsExecutableHandler.is_datafile(test_file) def test_win_pe_ctypes_test_pyd(self): test_file = self.get_test_loc('win_pe/_ctypes_test.pyd') @@ -109,6 +109,6 @@ class TestWinPeParseToPackage(TestWinPePeInfo): def get_results(self, test_file): package_data = [] - for manifest in win_pe.WindowsExecutable.recognize(test_file): + for manifest in win_pe.WindowsExecutableHandler.parse(test_file): package_data.append(manifest.to_dict()) return package_data diff --git a/tests/packagedcode/test_win_reg.py b/tests/packagedcode/test_win_reg.py index 7777f2c3029..2fa6bcc3c6b 100644 --- a/tests/packagedcode/test_win_reg.py +++ b/tests/packagedcode/test_win_reg.py @@ -14,10 +14,12 @@ from commoncode.system import on_linux +from scancode.cli_test_utils import check_json_scan +from scancode.cli_test_utils import run_scan_click +from packagedcode.win_reg import InstalledProgramFromDockerFilesSoftwareHandler from packagedcode.win_reg import create_absolute_installed_file_path -from packagedcode.win_reg import get_installed_packages -from packagedcode.win_reg import _report_installed_dotnet_versions -from packagedcode.win_reg import _report_installed_programs +from packagedcode.win_reg import get_installed_dotnet_versions_from_regtree +from packagedcode.win_reg import get_installed_windows_programs_from_regtree from packagedcode.win_reg import remove_drive_letter from packages_test_utils import check_result_equals_expected_json from packages_test_utils import PackageTester @@ -34,7 +36,11 @@ def test_win_reg__report_installed_dotnet_versions(self): with open(test_file) as f: software_registry_entries = json.load(f) results = [p.to_dict(_detailed=True) - for p in _report_installed_dotnet_versions(software_registry_entries)] + for p in get_installed_dotnet_versions_from_regtree( + registry_tree=software_registry_entries, + datasource_id=InstalledProgramFromDockerFilesSoftwareHandler.datasource_id, + package_type=InstalledProgramFromDockerFilesSoftwareHandler.default_package_type, + )] check_result_equals_expected_json(results, expected_loc, regen=REGEN_TEST_FIXTURES) def test_win_reg__report_installed_programs(self): @@ -43,7 +49,11 @@ def test_win_reg__report_installed_programs(self): with open(test_file) as f: software_registry_entries = json.load(f) results = [p.to_dict(_detailed=True) - for p in _report_installed_programs(software_registry_entries)] + for p in get_installed_windows_programs_from_regtree( + registry_tree=software_registry_entries, + datasource_id=InstalledProgramFromDockerFilesSoftwareHandler.datasource_id, + package_type=InstalledProgramFromDockerFilesSoftwareHandler.default_package_type, + )] check_result_equals_expected_json(results, expected_loc, regen=REGEN_TEST_FIXTURES) def test_win_reg_remove_drive_letter(self): @@ -59,8 +69,12 @@ def test_win_reg_create_absolute_installed_file_path(self): expected_path = '/home/test/c/Program Files/Test Program' self.assertEqual(result, expected_path) - def test_win_reg_get_installed_packages(self): - test_root_dir = self.get_test_loc('win_reg/get_installed_packages_docker/layer') - expected_loc = self.get_test_loc('win_reg/get_installed_packages_docker/expected-results') - results = list(p.to_dict(_detailed=True) for p in get_installed_packages(test_root_dir)) - check_result_equals_expected_json(results, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_win_reg_end_to_end(self): + test_dir = self.get_test_loc('win_reg/get_installed_packages_docker/layer') + expected_file = self.get_test_loc( + 'win_reg/get_installed_packages_docker/expected-results', + must_exist=False, + ) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_dir, '--json-pp', result_file]) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES) diff --git a/tests/packagedcode/test_windows.py b/tests/packagedcode/test_windows.py index 0aa0febdea0..b7743d9d3fb 100644 --- a/tests/packagedcode/test_windows.py +++ b/tests/packagedcode/test_windows.py @@ -19,10 +19,10 @@ class TestWindows(PackageTester): def test_gosum_is_package_data_file(self): test_file = self.get_test_loc('windows/mum/test.mum') - assert windows.MicrosoftUpdateManifest.is_package_data_file(test_file) + assert windows.MicrosoftUpdateManifestHandler.is_datafile(test_file) def test_windows_mum_parse(self): test_file = self.get_test_loc('windows/mum/test.mum') expected_loc = self.get_test_loc('windows/mum/test.mum.expected') - package_data = windows.MicrosoftUpdateManifest.recognize(test_file) - self.check_packages(package_data, expected_loc, regen=REGEN_TEST_FIXTURES) + package_data = windows.MicrosoftUpdateManifestHandler.parse(test_file) + self.check_packages_data(package_data, expected_loc, regen=REGEN_TEST_FIXTURES) From fb93891ea2d3cb410ec9268723aba71fa5e2a7ae Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 21:30:04 +0200 Subject: [PATCH 24/36] Adopt new handler design for Rubygems packages We now have these data file handlers: * GemArchiveHandler * GemMetadataArchiveExtractedHandler * GemspecHandler * GemspecInExtractedGemHandler * GemspecInInstalledVendorBundleSpecificationsHandler * GemfileHandler * GemfileInExtractedGemHandler * GemfileLockHandler * GemfileLockInExtractedGemHandler And we assemble these in Packages correctly Also improve minimally gemspec parsing Signed-off-by: Philippe Ombredanne --- src/packagedcode/rubygems.py | 704 ++++--- src/packagedcode/spec.py | 397 ++-- .../data/rubygems/gem/a_okay-0.1.0.gem.json | 7 +- .../gem/action_tracker-1.0.2.gem.json | 7 +- .../gem/archive-tar-minitar-0.5.2.gem.json | 7 +- .../rubygems/gem/blankslate-3.1.3.gem.json | 7 +- .../data/rubygems/gem/m2r-2.1.0.gem.json | 7 +- ...dea-address_standardization-0.4.1.gem.json | 7 +- ...mysmallidea-mad_mimi_mailer-0.0.9.gem.json | 7 +- .../new/dependabot-omnibus-0.87.15.gem.json | 7 +- .../gem/new/hiredis-0.6.3-java.gem.json | 7 +- .../rubygems/gem/new/int_time-0.0.2.gem.json | 7 +- .../gem/new/jaro_winkler-1.5.1-java.gem.json | 7 +- .../rubygems/gem/new/rubocop-0.62.0.gem.json | 11 +- .../rubygems/gem/ng-rails-csrf-0.1.0.gem.json | 7 +- .../data/rubygems/gem/small-0.2.gem.json | 7 +- .../rubygems/gem/small_wonder-0.1.10.gem.json | 7 +- .../gem/sprockets-vendor_gems-0.1.3.gem.json | 7 +- .../gemfile-lock/Gemfile.lock.expected | 581 +++--- .../gemfile-lock/complex/Gemfile.lock | 640 ++++++ .../gemfile-lock/complex/origin.ABOUT | 2 + .../data/rubygems/gemfile/1/Gemfile | 30 + .../data/rubygems/gemfile/1/Gemfile.lock | 207 ++ .../data/rubygems/gemfile/1/origin.ABOUT | 4 + .../data/rubygems/gemfile/10/Gemfile | 58 + .../data/rubygems/gemfile/10/Gemfile.lock | 524 +++++ .../data/rubygems/gemfile/10/origin.ABOUT | 4 + .../data/rubygems/gemfile/11/Gemfile | 55 + .../data/rubygems/gemfile/11/Gemfile.lock | 240 +++ .../data/rubygems/gemfile/11/origin.ABOUT | 4 + .../data/rubygems/gemfile/12/Gemfile | 123 ++ .../data/rubygems/gemfile/12/Gemfile.lock | 549 ++++++ .../data/rubygems/gemfile/12/origin.ABOUT | 4 + .../data/rubygems/gemfile/2/Gemfile | 19 + .../data/rubygems/gemfile/2/Gemfile.lock | 96 + .../data/rubygems/gemfile/2/origin.ABOUT | 4 + .../data/rubygems/gemfile/3/Gemfile | 6 + .../gemfile/3/github-linguist.gemspec | 1732 +++++++++++++++++ .../data/rubygems/gemfile/3/origin.ABOUT | 4 + .../data/rubygems/gemfile/4/Gemfile | 26 + .../data/rubygems/gemfile/4/origin.ABOUT | 2 + .../data/rubygems/gemfile/5/Gemfile | 7 + .../data/rubygems/gemfile/5/Gemfile.lock | 304 +++ .../data/rubygems/gemfile/5/origin.ABOUT | 4 + .../data/rubygems/gemfile/6/Gemfile | 3 + .../data/rubygems/gemfile/6/origin.ABOUT | 4 + .../data/rubygems/gemfile/6/scientist.gemspec | 22 + .../data/rubygems/gemfile/7/Gemfile | 11 + .../data/rubygems/gemfile/7/Gemfile.lock | 61 + .../data/rubygems/gemfile/7/origin.ABOUT | 4 + .../data/rubygems/gemfile/8/Gemfile | 8 + .../data/rubygems/gemfile/8/Gemfile.lock | 24 + .../data/rubygems/gemfile/8/origin.ABOUT | 6 + .../data/rubygems/gemfile/8/trilogy.gemspec | 27 + .../data/rubygems/gemfile/9/Gemfile | 3 + .../data/rubygems/gemfile/9/Gemfile.lock | 41 + .../data/rubygems/gemfile/9/origin.ABOUT | 6 + .../data/rubygems/gemfile/9/ssh_data.gemspec | 19 + ...ress_standardization.gemspec.expected.json | 71 +- .../gemspec/arel.gemspec.expected.json | 57 +- .../gemspec/cat.gemspec.expected.json | 35 +- .../gemspec/github.gemspec.expected.json | 39 +- .../logstash-filter-drop-3.0.5.gemspec | 33 + .../logstash-filter-drop.gemspec | 27 + .../gemspec/mecab-ruby.gemspec.expected.json | 13 +- .../rubygems/gemspec/oj.gemspec.expected.json | 37 +- .../gemspec/red-datasets-numo-narray.gemspec | 44 + .../gemspec/rubocop.gemspec.expected.json | 37 +- .../with_variables.gemspec.expected.json | 47 +- .../specifications/actiontext-6.1.4.gemspec | 46 + .../specifications/clamp-1.0.1.gemspec | 20 + .../specifications/racc-1.5.2.gemspec | 26 + .../specifications/rexml-3.2.5.gemspec | 38 + .../specifications/sequel-5.53.0.gemspec | 48 + .../data/rubygems/package/m2r-2.1.0.gem.json | 2 - tests/packagedcode/test_rubygems.py | 60 +- 76 files changed, 6396 insertions(+), 969 deletions(-) create mode 100644 tests/packagedcode/data/rubygems/gemfile-lock/complex/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile-lock/complex/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/1/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/1/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/1/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/10/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/10/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/10/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/11/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/11/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/11/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/12/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/12/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/12/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/2/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/2/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/2/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/3/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/3/github-linguist.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemfile/3/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/4/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/4/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/5/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/5/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/5/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/6/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/6/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/6/scientist.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemfile/7/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/7/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/7/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/8/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/8/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/8/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/8/trilogy.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemfile/9/Gemfile create mode 100644 tests/packagedcode/data/rubygems/gemfile/9/Gemfile.lock create mode 100644 tests/packagedcode/data/rubygems/gemfile/9/origin.ABOUT create mode 100644 tests/packagedcode/data/rubygems/gemfile/9/ssh_data.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop-3.0.5.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop.gemspec create mode 100644 tests/packagedcode/data/rubygems/gemspec/red-datasets-numo-narray.gemspec create mode 100644 tests/packagedcode/data/rubygems/installed/specifications/actiontext-6.1.4.gemspec create mode 100644 tests/packagedcode/data/rubygems/installed/specifications/clamp-1.0.1.gemspec create mode 100644 tests/packagedcode/data/rubygems/installed/specifications/racc-1.5.2.gemspec create mode 100644 tests/packagedcode/data/rubygems/installed/specifications/rexml-3.2.5.gemspec create mode 100644 tests/packagedcode/data/rubygems/installed/specifications/sequel-5.53.0.gemspec diff --git a/src/packagedcode/rubygems.py b/src/packagedcode/rubygems.py index 8925328e33e..c64ef138521 100644 --- a/src/packagedcode/rubygems.py +++ b/src/packagedcode/rubygems.py @@ -7,262 +7,252 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging import os from os.path import abspath from os.path import expanduser -import attr import saneyaml -from packageurl import PackageURL - from commoncode import archive -from commoncode import filetype from commoncode import fileutils +from packageurl import PackageURL + from packagedcode import models +from packagedcode import spec from packagedcode.gemfile_lock import GemfileLockParser -from packagedcode.spec import Spec from packagedcode.utils import combine_expressions +from packagedcode.utils import build_description +from packagedcode.utils import get_ancestor +# TODO: also support https://github.com/byrneg7/MWL_api/blob/master/.ruby-version -# TODO: check: -# https://github.com/hugomaiavieira/pygments-rspec -# https://github.com/tushortz/pygeminfo -# https://github.com/mfwarren/gemparser/blob/master/src/gemparser/__init__.py -# https://gitlab.com/balasankarc/gemfileparser - -TRACE = False - - -def logger_debug(*args): - pass +# TODO: support installed rails/bundler apps with vendor directory +# see https://github.com/brotandgames/ciao and logstash (jRuby) are good examples -logger = logging.getLogger(__name__) +class BaseGemHandler(models.DatafileHandler): -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(' '.join( - isinstance(a, str) and a or repr(a) for a in args)) + @classmethod + def compute_normalized_license(cls, package): + return compute_normalized_license(package.declared_license) -@attr.s() -class RubyGemData(models.PackageData): - filetypes = ('.tar', 'tar archive',) - mimetypes = ('application/x-tar',) - default_type = 'gem' +class GemArchiveHandler(BaseGemHandler): + path_patterns = ('*.gem',) + filetypes = ('posix tar archive',) + datasource_id = 'gem_archive' + default_package_type = 'gem' default_primary_language = 'Ruby' - default_web_baseurl = 'https://rubygems.org/gems/' - default_download_baseurl = 'https://rubygems.org/downloads' - default_api_baseurl = 'https://rubygems.org/api' + description = 'RubyGems gem package archive' + documentation_url = ( + 'https://web.archive.org/web/20220326093616/' + 'https://piotrmurach.com/articles/looking-inside-a-ruby-gem/' + ) @classmethod - def get_package_root(cls, manifest_resource, codebase): - # FIXME: this can vary if we have a plain checkout or install vs. a .gem - # archive where we have "multiple" roots - if manifest_resource.name.endswith('.gem'): - return manifest_resource - - if manifest_resource.name == 'metadata.gz-extract': - # first level is metadata.gz-extract/ - parent = manifest_resource.parent(codebase) - # second level is actual .gem-extract/ directory - return parent.parent(codebase) + def parse(cls, location): + metadata = extract_gem_metadata(location) + metadata = saneyaml.load(metadata) + yield build_rubygem_package_data( + gem_data=metadata, + datasource_id=cls.datasource_id, + ) - if manifest_resource.name.endswith(('.gemspec', 'Gemfile', 'Gemfile.lock',)): - return manifest_resource.parent(codebase) - # unknown? - return manifest_resource +def assemble_extracted_gem(cls, package_data, resource, codebase): + """ + An assemble implementation shared by handlers for manifests found in an + extracted gem using extractcode. + """ + datafile_name_patterns = ( + 'metadata.gz-extract/metadata.gz-extract', + 'data.gz-extract/*.gemspec', + 'data.gz-extract/Gemfile', + 'data.gz-extract/Gemfile.lock', + ) - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) + gemroot = get_ancestor(levels_up=2, resource=resource, codebase=codebase) - def repository_homepage_url(self, baseurl=default_web_baseurl): - return rubygems_homepage_url(self.name, self.version, repo=baseurl) + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=gemroot, + codebase=codebase, + ) - def repository_download_url(self, baseurl=default_download_baseurl): - quals = self.qualifiers or {} - platform = quals.get('platform') or None - return rubygems_download_url(self.name, self.version, platform, repo=baseurl) - def api_data_url(self, baseurl=default_api_baseurl): - return rubygems_api_url(self.name, self.version, repo=baseurl) +class GemMetadataArchiveExtractedHandler(BaseGemHandler): + datasource_id = 'gem_archive_extracted' + path_patterns = ('*/metadata.gz-extract',) + default_package_type = 'gem' + default_primary_language = 'Ruby' + description = 'RubyGems gem package extracted archive' + documentation_url = ( + 'https://web.archive.org/web/20220326093616/' + 'https://piotrmurach.com/articles/looking-inside-a-ruby-gem/' + ) @classmethod - def extra_key_files(cls): - return ['metadata.gz-extract', 'metadata.gz-extract/metadata.gz-extract'] + def parse(cls, location): + with open(location, 'rb') as met: + metadata = met.read() + metadata = saneyaml.load(metadata) + yield build_rubygem_package_data( + gem_data=metadata, + datasource_id=cls.datasource_id, + ) @classmethod - def extra_root_dirs(cls): - return ['data.tar.gz-extract', 'metadata.gz-extract'] - + def assemble(cls, package_data, resource, codebase): + yield from assemble_extracted_gem(cls, package_data, resource, codebase) -@attr.s() -class GemArchive(RubyGemData, models.PackageDataFile): - file_patterns = ('*.gem',) - extensions = ('.gem',) +class BaseGemProjectHandler(BaseGemHandler): @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.gem') - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - metadata = get_gem_metadata(location) - metadata = saneyaml.load(metadata) - yield build_rubygem_package(cls, metadata, download_url=None, package_url=None) - - -@attr.s() -class GemArchiveExtracted(RubyGemData, models.PackageDataFile): + def assemble(cls, package_data, resource, codebase): + datafile_name_patterns = ( + '*.gemspec', + 'Gemfile', + 'Gemfile.lock', + ) - file_patterns = ('metadata.gz-extract',) - extensions = ('.gz-extract',) + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=resource.parent(codebase), + codebase=codebase, + ) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.gz-extract') + def assign_package_to_resources(cls, package, resource, codebase): + return cls.assign_package_to_parent_tree(package, resource, codebase) - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - with open(location, 'rb') as met: - metadata = met.read() - metadata = saneyaml.load(metadata) - yield build_rubygem_package(cls, metadata) +class GemspecHandler(BaseGemHandler): + datasource_id = 'gemspec' + path_patterns = ('*.gemspec',) + default_package_type = 'gem' + default_primary_language = 'Ruby' + description = 'RubyGems gemspec manifest' + documentation_url = 'https://guides.rubygems.org/specification-reference/' -@attr.s() -class GemSpec(RubyGemData, models.PackageDataFile): + @classmethod + def parse(cls, location): + gemspec = spec.parse_spec( + location=location, + package_type=cls.default_package_type, + ) - file_patterns = ('*.gemspec',) - extensions = ('.gemspec',) + name = gemspec.get('name') + version = gemspec.get('version') + homepage_url = gemspec.get('homepage') - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('.gemspec') + description = build_description( + summary=gemspec.get('summary'), + description=gemspec.get('description'), + ) + vcs_url = gemspec.get('source') - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - gemspec_object = Spec() - gemspec_data = gemspec_object.parse_spec(location) - - name = gemspec_data.get('name') - version = gemspec_data.get('version') - homepage_url = gemspec_data.get('homepage_url') - summary = gemspec_data.get('summary') - description = gemspec_data.get('description') - if len(summary) > len(description): - description = summary - - declared_license = gemspec_data.get('license') + declared_license = gemspec.get('license') if declared_license: + # FIXME: why splitting here? this is a job for the license detection declared_license = declared_license.split(',') - author = gemspec_data.get('author') or [] - email = gemspec_data.get('email') or [] - parties = list(party_mapper(author, email)) + parties = get_parties(gemspec) + dependencies = gemspec.get('dependencies') or [] - package_data = cls( + urls = get_urls(name=name, version=version) + + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, parties=parties, homepage_url=homepage_url, description=description, - declared_license=declared_license + declared_license=declared_license, + primary_language=cls.default_primary_language, + dependencies=dependencies, + **urls ) - dependencies = gemspec_data.get('dependencies', {}) or {} - package_dependencies = [] - for name, version in dependencies.items(): - package_dependencies.append( - models.DependentPackage( - purl=PackageURL( - type='gem', - name=name - ).to_string(), - extracted_requirement=', '.join(version), - scope='dependencies', - is_runtime=True, - is_optional=False, - is_resolved=False, - ) - ) - package_data.dependencies = package_dependencies + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) yield package_data -@attr.s() -class Gemfile(RubyGemData, models.PackageDataFile): - - file_patterns = ('Gemfile',) +class GemspecInExtractedGemHandler(GemspecHandler): + datasource_id = 'gemspec_extracted' + path_patterns = ('*/data.gz-extract/*.gemspec',) + description = 'RubyGems gemspec manifest - extracted data layout' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('Gemfile') + def assemble(cls, package_data, resource, codebase): + yield from assemble_extracted_gem(cls, package_data, resource, codebase) + + +class GemspecInInstalledVendorBundleSpecificationsHandler(GemspecHandler): + """ + A special handler for gemspec seen in the vendor/bundle/*/specifications + directory when installed by Bundler. In this case, we have a special layout: + all the .gemspec are processed and compiled in a specifications/ dir by + Bundler. But these gemspec are standing alone and have been detached from + their original "gem" directory. They are also different from the base + gemspec for the same gem as they have been modified (?streamlined or + normalized?) by Bundler including freezing strings. + + We reuse the default DatafileHandler.assemble() implementation such that + each such gemspec is considered standing alone and have no other companion + datafile or files assigned to a Package. + """ + datasource_id = 'gem_gemspec_installed_specifications' + # seen in vendor/bundle/jruby/2.5.0/specifications/* style layouts + # and bundle/specifications/* style layouts + # TODO: also report "jruby/2.5.0/" as extra or qualifiers + path_patterns = ('*/specifications/*.gemspec',) + description = 'RubyGems gemspec manifest - installed vendor/bundle/specifications layout' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - # TODO: Implement me - pass + def assemble(cls, package_data, resource, codebase): + # TODO: consider assembling datafiles across vendor/ subdirs + yield from models.DatafileHandler.assemble(package_data, resource, codebase) -@attr.s() -class GemfileLock(RubyGemData, models.PackageDataFile): - file_patterns = ('Gemfile.lock',) - extensions = ('.lock',) +# Note: we subclass GemspecHandler as the parsing code can handle both Ruby files +# TODO: https://stackoverflow.com/questions/41454333/meaning-of-new-block-git-sourcegithub-in-gemfile +class GemfileHandler(GemspecHandler): + datasource_id = 'gemfile' + path_patterns = ('*/Gemfile', '*/*.gemfile', '*/Gemfile-*') + default_package_type = 'gem' + default_primary_language = 'Ruby' + description = 'RubyGems Bundler Gemfile' + documentation_url = 'https://bundler.io/man/gemfile.5.html' + + +class GemfileInExtractedGemHandler(GemfileHandler): + datasource_id = 'gemfile_extracted' + path_patterns = ('*/data.gz-extract/Gemfile',) + description = 'RubyGems Bundler Gemfile - extracted layout' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('Gemfile.lock') + def assemble(cls, package_data, resource, codebase): + return assemble_extracted_gem(cls, package_data, resource, codebase) + + +class GemfileLockHandler(BaseGemProjectHandler): + datasource_id = 'gemfile_lock' + path_patterns = ('*/Gemfile.lock',) + default_package_type = 'gem' + default_primary_language = 'Ruby' + description = 'RubyGems Bundler Gemfile.lock' + documentation_url = 'https://bundler.io/man/gemfile.5.html' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): gemfile_lock = GemfileLockParser(location) - package_dependencies = [] + dependencies = [] for _, gem in gemfile_lock.all_gems.items(): - package_dependencies.append( + dependencies.append( models.DependentPackage( purl=PackageURL( type='gem', @@ -270,6 +260,7 @@ def recognize(cls, location): version=gem.version ).to_string(), extracted_requirement=', '.join(gem.requirements), + # FIXME: get proper scope... This does not seem right scope='dependencies', is_runtime=True, is_optional=False, @@ -277,7 +268,12 @@ def recognize(cls, location): ) ) - yield cls(dependencies=package_dependencies) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + dependencies=dependencies, + primary_language=cls.default_primary_language, + ) for _, gem in gemfile_lock.all_gems.items(): deps = [] @@ -296,30 +292,27 @@ def recognize(cls, location): is_resolved=True, ) ) + urls = get_urls(gem.name, gem.version) - yield cls( + yield models.PackageData( + datasource_id=cls.datasource_id, + primary_language=cls.default_primary_language, + type=cls.default_package_type, name=gem.name, version=gem.version, - dependencies=deps + dependencies=deps, + **urls ) -@attr.s() -class RubyPackage(RubyGemData, models.Package): - """ - A Ruby Package that is created out of one/multiple ruby package - manifests and package-like data, with it's files. - """ +class GemfileLockInExtractedGemHandler(GemfileLockHandler): + datasource_id = 'gemfile_lock_extracted' + path_patterns = ('*/data.gz-extract/Gemfile.lock',) + description = 'RubyGems Bundler Gemfile.lock - extracted layout' - @property - def manifests(self): - return [ - GemArchive, - GemArchiveExtracted, - Gemfile, - GemSpec, - GemfileLock - ] + @classmethod + def assemble(cls, package_data, resource, codebase): + yield from assemble_extracted_gem(cls, package_data, resource, codebase) def compute_normalized_license(declared_license): @@ -341,69 +334,91 @@ def compute_normalized_license(declared_license): return combine_expressions(detected_licenses) -def rubygems_homepage_url(name, version, repo='https://rubygems.org/gems'): +def get_urls(name, version=None, platform=None): + """ + Return a mapping of standard URLs """ - Return a Rubygems.org homepage URL given a name, optional version and a base - rubygems `repo` web interface URL. + dnlu = rubygems_download_url(name, version, platform) + return dict( + repository_homepage_url=rubygems_homepage_url(name, version), + repository_download_url=dnlu, + api_data_url=rubygems_api_url(name, version), + download_url=dnlu, + ) + - For instance: https://rubygems.org/gems/mocha/versions/1.7.0 or - https://rubygems.org/gems/mocha +def rubygems_homepage_url(name, version=None): + """ + Return a Rubygems.org homepage URL given a ``name`` and optional + ``version``, or None if ``name`` is empty. + + For example: + >>> url = rubygems_homepage_url(name='mocha', version='1.7.0') + >>> assert url == 'https://rubygems.org/gems/mocha/versions/1.7.0' + + >>> url = rubygems_homepage_url(name='mocha') + >>> assert url == 'https://rubygems.org/gems/mocha' """ if not name: return - repo = repo.rstrip('/') if version: version = version.strip().strip('/') - home_url = '{repo}/{name}/versions/{version}' + return f'https://rubygems.org/gems/{name}/versions/{version}' else: - home_url = '{repo}/{name}' - return home_url.format(**locals()) + return f'https://rubygems.org/gems/{name}' -def rubygems_download_url(name, version, platform=None, repo='https://rubygems.org/downloads'): +def rubygems_download_url(name, version, platform=None): """ Return a .gem download URL given a name, version, and optional platform (e.g. java) and a base repo URL. - For example: https://rubygems.org/downloads/mocha-1.7.0.gem + For example: + + >>> url = rubygems_download_url(name='mocha', version='1.7.0') + >>> assert url == 'https://rubygems.org/downloads/mocha-1.7.0.gem' """ if not name or not version: return - repo = repo.rstrip('/') name = name.strip().strip('/') version = version.strip().strip('/') version_plat = version if platform and platform != 'ruby': - version_plat = '{version}-{platform}'.format(**locals()) - return '{repo}/{name}-{version_plat}.gem'.format(**locals()) + version_plat = f'{version}-{platform}' + return f'https://rubygems.org/downloads/{name}-{version_plat}.gem' -def rubygems_api_url(name, version=None, repo='https://rubygems.org/api'): +def rubygems_api_url(name, version=None): """ Return a package API data URL given a name, an optional version and a base repo API URL. For instance: - https://rubygems.org/api/v2/rubygems/action_tracker/versions/1.0.2.json + >>> url = rubygems_api_url(name='turbolinks', version='1.0.2') + >>> assert url == 'https://rubygems.org/api/v2/rubygems/turbolinks/versions/1.0.2.json' If no version, we return: - https://rubygems.org/api/v1/versions/turbolinks.json + >>> url = rubygems_api_url(name='turbolinks') + >>> assert url == 'https://rubygems.org/api/v1/versions/turbolinks.json' - Unused: + Things we could return: a summary for the latest version, with deps https://rubygems.org/api/v1/gems/mqlight.json """ - repo = repo.rstrip('/') + if not name: + return + if version: - api_url = '{repo}/v2/rubygems/{name}/versions/{version}.json' + return f'https://rubygems.org/api/v2/rubygems/{name}/versions/{version}.json' else: - api_url = '{repo}/v1/versions/{name}.json' - return api_url.format(**locals()) + return f'https://rubygems.org/api/v1/versions/{name}.json' -def get_gem_metadata(location): +# FIXME: we should unify this with handling extracted gems +def extract_gem_metadata(location): """ Return the string content of the metadata of a .gem archive file at - `location` or None + ``location`` or None. + This performs an extracion to a temp directory. """ extract_loc = None try: @@ -422,10 +437,10 @@ def get_gem_metadata(location): content = met.read() elif os.path.exists(metadata_gz): - content= archive.get_gz_compressed_file_content(metadata_gz) + content = archive.get_gz_compressed_file_content(metadata_gz) else: - raise Exception('No gem metadata found in RubyGemData .gem file.') + raise Exception(f'No RubyGems metadata file found inside .gem archive: {location!r}') return content @@ -434,37 +449,65 @@ def get_gem_metadata(location): fileutils.delete(extract_loc) -def build_rubygem_package(cls, gem_data, download_url=None, package_url=None): +def build_rubygem_package_data(gem_data, datasource_id): """ - Return a Package built from a Gem `gem_data` mapping or None. - The `gem_data can come from a .gemspec or .gem/gem_data. - Optionally use the provided `download_url` and `purl` strings. + Return a PackageData for ``datasource_id`` built from a Gem `gem_data` + mapping or None. The ``gem_data`` can come from a .gemspec or .gem/metadata. + Optionally use the provided ``download_url`` and `package_url`` strings. """ if not gem_data: return + metadata = gem_data.get('metadata') or {} + name = gem_data.get('name') + # there are two levels of nesting for version: + version1 = gem_data.get('version') or {} + version = version1.get('version') or None - short_desc = gem_data.get('summary') or '' - long_desc = gem_data.get('description') or '' - if long_desc == short_desc: - long_desc = None - descriptions = [d for d in (short_desc, long_desc) if d and d.strip()] - description = '\n'.join(descriptions) + platform = gem_data.get('platform') + if platform != 'ruby': + qualifiers = dict(platform=platform) + else: + qualifiers = {} - # Since the gem spec doc is not clear https://guides.rubygems.org - # /specification-reference/#licenseo, we will treat a list of licenses and a - # conjunction for now (e.g. AND) + description = build_description( + summary=gem_data.get('summary'), + description=gem_data.get('description'), + ) + + # Since the gem spec doc is not clear wrt. to the default being OR or AND + # we will treat a list of licenses and a conjunction for now (e.g. AND) + # See https://guides.rubygems.org/specification-reference/#licenseo lic = gem_data.get('license') licenses = gem_data.get('licenses') declared_license = licenses_mapper(lic, licenses) - package_data = cls( + # we may have tow homepages and one may be wrong. + # we prefer the one from the metadata + homepage_url = metadata.get('homepage_uri') + if not homepage_url: + homepage_url = gem_data.get('homepage') + + urls = get_urls(name, version, platform) + dependencies = get_dependencies(gem_data.get('dependencies')) + file_references = get_file_references(metadata.get('files')) + + package_data = models.PackageData( + datasource_id=datasource_id, + type=GemArchiveHandler.default_package_type, + primary_language=GemArchiveHandler.default_primary_language, name=name, + version=version, + qualifiers=qualifiers, description=description, - homepage_url=gem_data.get('homepage'), - download_url=download_url, - declared_license=declared_license + homepage_url=homepage_url, + declared_license=declared_license, + bug_tracking_url=metadata.get('bug_tracking_uri'), + code_view_url=metadata.get('source_code_uri'), + file_references=file_references, + dependencies=dependencies, + **urls, ) # we can have one singular or a plural list of authors @@ -478,7 +521,7 @@ def build_rubygem_package(cls, gem_data, download_url=None, package_url=None): party = models.Party(name=author, role='author') package_data.parties.append(party) - # TODO: we have a email that is either a string or a list of string + # TODO: we have an email that is either a string or a list of string # date: 2019-01-09 00:00:00.000000000 Z date = gem_data.get('date') @@ -486,54 +529,19 @@ def build_rubygem_package(cls, gem_data, download_url=None, package_url=None): date = date[:10] package_data.release_date = date[:10] + # TODO: infer source purl and add purl to package_data.source_packages - # there are two levels of nesting - version1 = gem_data.get('version') or {} - version = version1.get('version') or None - package_data.version = version - package_data.set_purl(package_url) - - metadata = gem_data.get('metadata') or {} - if metadata: - homepage_url = metadata.get('homepage_uri') - if homepage_url: - if not package_data.homepage_url: - package_data.homepage_url = homepage_url - elif package_data.homepage_url == homepage_url: - pass - else: - # we have both and one is wrong. - # we prefer the existing one from the metadata - pass - - package_data.bug_tracking_url = metadata.get('bug_tracking_uri') - - source_code_url = metadata.get('source_code_uri') - if source_code_url: - package_data.code_view_url = source_code_url - # TODO: infer purl and add purl to package_data.source_packages - - # not used for now - # "changelog_uri" => "https://example.com/user/bestgemever/CHANGELOG.md", - # "wiki_uri" => "https://example.com/user/bestgemever/wiki" - # "mailing_list_uri" => "https://groups.example.com/bestgemever", - # "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1", - - platform = gem_data.get('platform') - if platform != 'ruby': - qualifiers = dict(platform=platform) - if not package_data.qualifiers: - package_data.qualifiers = {} - - package_data.qualifiers.update(qualifiers) - - package_data.dependencies = get_dependencies(gem_data.get('dependencies')) - - if not package_data.download_url: - package_data.download_url = package_data.repository_download_url() + # not used for now + # "changelog_uri" => "https://example.com/user/bestgemever/CHANGELOG.md", + # "wiki_uri" => "https://example.com/user/bestgemever/wiki" + # "mailing_list_uri" => "https://groups.example.com/bestgemever", + # "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1", if not package_data.homepage_url: - package_data.homepage_url = package_data.repository_homepage_url() + package_data.homepage_url = rubygems_homepage_url(name, version) + + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) return package_data @@ -636,8 +644,8 @@ def get_dependencies(dependencies): if not name: continue + # the default value is runtime scope = dependency.get('type', '').strip(':') or 'runtime' - # the other value is runtime is_optional = scope == 'development' is_runtime = scope == 'runtime' @@ -651,7 +659,7 @@ def get_dependencies(dependencies): # constraints and versions if ((constraint == '>=' and version == '0') or not (constraint and version)): continue - version_constraint = '{} {}'.format(constraint, version) + version_constraint = f'{constraint} {version}' constraints.append(version_constraint) # if we have only one version constraint and this is "=" then we are resolved @@ -659,10 +667,11 @@ def get_dependencies(dependencies): if constraints and len(constraints) == 1: is_resolved = constraint == '=' + # FIXME: check this is correct and complies with vers. version_constraint = ', '.join(constraints) dep = models.DependentPackage( - purl=RubyGemData.create(name=name).purl, + purl=str(PackageURL(type='gem', name=name)), extracted_requirement=version_constraint or None, scope=scope, is_runtime=is_runtime, @@ -712,87 +721,38 @@ def get_dependencies(dependencies): } -################################################################################ -def spec_defaults(): +def party_mapper(role, names=[], emails=[]): """ - Return a mapping with spec attribute defaults to ensure that the - returned results are the same on RubyGemDatas 1.8 and RubyGemDatas 2.0 + Yields Party with ``role`` objects from a ``names`` list of string. """ - return { - 'base_dir': None, - 'bin_dir': None, - 'cache_dir': None, - 'doc_dir': None, - 'gem_dir': None, - 'gems_dir': None, - 'ri_dir': None, - 'spec_dir': None, - 'spec_file': None, - 'cache_file': None, - 'full_gem_path': None, - 'full_name': None, - 'gem_data': {}, - 'full_name': None, - 'homepage': '', - 'licenses': [], - 'loaded_from': None, - } - - -# known gem fields. other are ignored -known_fields = [ - 'platform', - 'name', - 'version', - 'homepage', - 'summary', - 'description', - 'licenses', - 'email', - 'authors', - 'date', - 'requirements', - 'dependencies', - - # extra fields - 'files', - 'test_files', - 'extra_rdoc_files', - - 'rubygems_version', - 'required_ruby_version', - - 'rubyforge_project', - 'loaded_from', - 'original_platform', - 'new_platform', - 'specification_version', -] - - -def normalize(gem_data, known_fields=known_fields): + if names: + return ( + models.Party(type=models.party_person, name=name, role=role) + for name in names + ) + elif emails: + return ( + models.Party(type=models.party_person, email=email, role=role) + for email in emails + ) + + +def get_parties(gem_data): """ - Return a mapping of gem data filtering out any field that is not a known - field in a gem mapping. Ensure that all known fields are present - even if empty. + Return a lits of Party from a mapping of ``gem_data`` """ - return dict( - [(k, gem_data.get(k) or None) for k in known_fields] - ) + parties = [] + authors = gem_data.get('author') or [] + parties.extend(party_mapper(names=authors, role='author')) + # FIXME: emails is NOT a party + emails = gem_data.get('email') or [] + parties.extend(party_mapper(emails=emails, role='author')) + return parties -def party_mapper(author, email): +def get_file_references(files): """ - Yields a Party object with author and email. + Return a list of FileReference from a ``files`` list of gem file paths. """ - for person in author: - yield models.Party( - type=models.party_person, - name=person, - role='author') - - for person in email: - yield models.Party( - type=models.party_person, - email=person, - role='email') + files = files or [] + return [models.FileReference(path) for path in files] diff --git a/src/packagedcode/spec.py b/src/packagedcode/spec.py index 043cbcaf763..c0bf7083c51 100644 --- a/src/packagedcode/spec.py +++ b/src/packagedcode/spec.py @@ -1,169 +1,286 @@ -# All rights reserved. -# SPDX-License-Identifier: Apache-2.0 AND CC-BY-4.0 # -# Visit https://aboutcode.org and https://github.com/nexB/scancode-toolkit for -# support and download. ScanCode is a trademark of nexB Inc. -# -# The ScanCode software is licensed under the Apache License version 2.0. -# The ScanCode open data is licensed under CC-BY-4.0. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. # -import io -import logging import re from gemfileparser import GemfileParser +from packagedcode import models +from packageurl import PackageURL +from functools import partial + """ -Handle Cocoapods(.podspec) and Ruby(.gemspec) files. +Handle Cocoapods (.podspec/Pofile) and Ruby(.gemspec/Gemfile) files. """ +# FIXME: code needs cleanup + +parse_name = re.compile( + r'.*\.name\s*=\s*' + r'(?P.*)' +) + +parse_version = re.compile( + r'.*\.version\s*=\s*' + f'(?P.*)' +) + +parse_summary = re.compile( + r'.*\.summary\s*=\s*' + r'(?P.*)', +) -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - -class Spec(): - parse_name = re.compile(r'.*\.name(\s*)=(?P.*)') - parse_version = re.compile(r'.*\.version(\s*)=(?P.*)') - parse_license = re.compile(r'.*\.license(\s*)=(?P.*)') - parse_summary = re.compile(r'.*\.summary(\s*)=(?P.*)') - parse_description = re.compile(r'.*\.description(\s*)=(?P.*)') - parse_homepage = re.compile(r'.*\.homepage(\s*)=(?P.*)') - parse_source = re.compile(r'.*\.source(\s*)=(?P.*)') - - def parse_spec(self, location): - """ - Return dictionary contains podspec or gemspec file data. - """ - with io.open(location, encoding='utf-8', closefd=True) as data: - lines = data.readlines() - - spec_data = {} - - for line in lines: - line = pre_process(line) - match = self.parse_name.match(line) - if match: - name = match.group('name') - spec_data['name'] = get_stripped_data(name) - match = self.parse_version.match(line) - if match: - version = match.group('version') - spec_data['version'] = get_stripped_data(version) - match = self.parse_license.match(line) - if match: - license_value = match.group('license') - spec_data['license'] = get_stripped_data(license_value) - match = self.parse_summary.match(line) - if match: - summary = match.group('summary') - spec_data['summary'] = get_stripped_data(summary) - match = self.parse_homepage.match(line) - if match: - homepage = match.group('homepage') - spec_data['homepage_url'] = get_stripped_data(homepage) - match = self.parse_source.match(line) - if match: - source = re.sub(r'/*.*source.*?>', '', line) - stripped_source = re.sub(r',.*', '', source) - spec_data['source'] = get_stripped_data(stripped_source) - match = self.parse_description.match(line) - if match: - if location.endswith('.gemspec'): - # FIXME: description can be in single or multi-lines - # There are many different ways to write description. - description = match.group('description') - spec_data['description'] = get_stripped_data(description) - else: - spec_data['description'] = get_description(location) - if '.email' in line: - _key, _sep, value = line.rpartition('=') - stripped_emails = get_stripped_data(value) - stripped_emails = stripped_emails.strip() - stripped_emails = stripped_emails.split(',') - spec_data['email'] = stripped_emails - elif '.author' in line: - authors = re.sub(r'/*.*author.*?=', '', line) - stripped_authors = get_stripped_data(authors) - stripped_authors = re.sub(r'(\s*=>\s*)', '=>', stripped_authors) - stripped_authors = stripped_authors.strip() - stripped_authors = stripped_authors.split(',') - spec_data['author'] = stripped_authors - - parser = GemfileParser(location) - deps = parser.parse() - dependencies = {} - for key in deps: - depends = deps.get(key, []) or [] - for dep in depends: - dependencies[dep.name] = dep.requirement - spec_data['dependencies'] = dependencies - - return spec_data +# simple single line quoted description +parse_description = re.compile( + r'.*\.description\s*=\s*' + r'(?P.*)', +) + +parse_homepage = re.compile( + r'.*\.homepage\s*=\s*' + r'(?P.*)' +) + +parse_license = re.compile( + r'.*\.license\s*=\s*' + r'(?P.*)' +) + +parse_podspec_source = re.compile( + r'.*\.source\s*=\s*' + r'(?P.*)' +) + +# See in gemspec +# for file refs: +# files +# test_files +# extensions +# executables +# extra_rdoc_files +# date = "2017-11-07" +# metadata +# rubygems_version +# licenses = ['MIT'] +# authors = ["Javan Makhmali".freeze, "Sam Stephenson".freeze, "David Heinemeier Hansson".freeze] +# email = ["javan@javan.us".freeze, "sstephenson@gmail.com".freeze, "david@loudthinking.com".freeze] +# email = 'rubocop@googlegroups.com' + + +def get_value(name, matcher, line, clean=True): + """ + Return the value for the ``name`` attribute collected using the ``matcher`` + regex in the ``line`` text. + """ + match = matcher.match(line) + if match: + value = match.group(name) + return get_cleaned_string(value) if clean else value + + +# FIXME: this does not smell right as we ignore the matched value +def get_podspec_source(line): + if '.source' in line: + match = get_value(name='source', matcher=parse_podspec_source, line=line) + if match: + source = re.sub(r'/*.*source.*?>', '', line) + stripped_source = re.sub(r',.*', '', source) + return get_cleaned_string(stripped_source) + + +def get_emails(line): + """ + Return a list of emails extracted from a text ``line``, or None + """ + if '.email' in line: + _key, _sep, value = line.rpartition('=') + stripped_emails = get_cleaned_string(value) + stripped_emails = stripped_emails.strip() + stripped_emails = stripped_emails.split(',') + return stripped_emails + + +def get_authors(line): + """ + Return a list of authors extracted from a text ``line``, or None + """ + if '.author' in line: + authors = re.sub(r'/*.*author.*?=', '', line) + stripped_authors = get_cleaned_string(authors) + stripped_authors = re.sub(r'(\s*=>\s*)', '=>', stripped_authors) + stripped_authors = stripped_authors.strip() + stripped_authors = stripped_authors.split(',') + return stripped_authors + + +# mapping of parser callable by its field name +PARSER_BY_NAME = { + 'name': partial(get_value, name='name', matcher=parse_name), + 'version': partial(get_value, name='version', matcher=parse_version), + 'license': partial(get_value, name='license', matcher=parse_license), + 'summary': partial(get_value, name='summary', matcher=parse_summary), + 'description': partial(get_value, name='description', matcher=parse_description, clean=False), + 'homepage': partial(get_value, name='homepage', matcher=parse_homepage), + 'source': get_podspec_source, + 'email': get_emails, + 'author': get_authors, +} + + +def parse_spec(location, package_type): + """ + Return a mapping of data parsed from a podspec/gemspec/Pofile/Gemfile file + at ``location``. Use ``package_type`` a Package URL type for dependencies. + dependencies is a list of DependentPackage. + """ + spec_data = {} + with open(location) as spec: + content = spec.read() + + lines = content.splitlines() + for line in lines: + line = pre_process(line) + + for attribute_name, parser in PARSER_BY_NAME.items(): + parsed = parser(line=line) + if parsed: + spec_data[attribute_name] = parsed + + # description can be in single or multi-lines + # There are many different ways to write description. + # we reparse for multline + description = spec_data.get("description") + if description: + if '<<-' in description: + # a Ruby multiline text + spec_data['description'] = get_multiline_description( + description_start=description, + lines=lines, + ) + else: + # a single quoted description + spec_data['description'] = get_cleaned_string(description) + + # We avoid reloading twice the file but we are still parsing twice: need to + # merge all in gemfileparser or write a better parser. + spec_data['dependencies'] = list(get_dependent_packages( + lines=lines, + location=location, + package_type=package_type, + )) + + return spec_data + + +def get_dependent_packages(lines, location, package_type): + """ + Yield DependentPackage from the file at ``location`` for the given + ``package_type``. + """ + flags_by_scope = { + 'runtime': dict(is_runtime=True, is_optional=False), + 'dependency': dict(is_runtime=True, is_optional=False), + 'production': dict(is_runtime=True, is_optional=False), + + 'development': dict(is_runtime=False, is_optional=True), + 'test': dict(is_runtime=False, is_optional=True), + 'metrics': dict(is_runtime=False, is_optional=True), + } + + dependencies = LinesBasedGemfileParser(lines=lines, filepath=location).parse() + + for key in dependencies: + depends = dependencies.get(key, []) or [] + for dep in depends: + flags = flags_by_scope.get(key, 'runtime') + + yield models.DependentPackage( + purl=PackageURL(type=package_type, name=dep.name).to_string(), + extracted_requirement=', '.join(dep.requirement), + scope=key, + is_resolved=False, + **flags, + ) + + +class LinesBasedGemfileParser(GemfileParser): + """ + A GemfileParser that works from a text lines rather than re-reading a file. + Done to avoid reading a file twice. + """ + + def __init__(self, lines, filepath, appname=''): + self.filepath = filepath + + self.current_group = 'runtime' + + self.appname = appname + self.dependencies = { + 'development': [], + 'runtime': [], + 'dependency': [], + 'test': [], + 'production': [], + 'metrics': [], + } + self.contents = lines + + self.gemspec = filepath.endswith(('.gemspec', '.podspec')) def pre_process(line): """ - Return line after comments and space. + Return a ``line`` cleaned from comments markers and space. """ if '#' in line: line = line[:line.index('#')] - stripped_data = line.strip() + return line.strip() - return stripped_data -def get_stripped_data(data): +def get_cleaned_string(string): """ - Return data after removing unnecessary special character + Return ``string`` removing unnecessary special character """ - for strippable in ("'",'"', '{', '}', '[', ']', '%q',): - data = data.replace(strippable, '') - - return data.strip() + if string: + for replaceable in ("'", '"', '{', '}', '[', ']', '%q', '<', '>', '.freeze'): + string = string.replace(replaceable, '') + return string.strip() -def get_description(location): +def get_multiline_description(description_start, lines): """ - Return description from podspec. + Return a multiline description given the ``description_start`` start of the + decsription and a ``lines`` list. These are common in .podspec. https://guides.cocoapods.org/syntax/podspec.html#description description is in the form: spec.description = <<-DESC - Computes the meaning of life. - Features: - 1. Is self aware - ... - 42. Likes candies. - DESC - """ - with io.open(location, encoding='utf-8', closefd=True) as data: - lines = data.readlines() - description = '' - for i, content in enumerate(lines): - if '.description' in content: - for cont in lines[i+1:]: - if 'DESC' in cont: - break - description += ' '.join([description, cont.strip()]) - break - description.strip() - return description \ No newline at end of file + Computes the meaning of life. + Features: + 1. Is self aware + ... + 42. Likes candies. + DESC + """ + # from "<<-DESC" to "DESC" + description_end = description_start.strip('<-') + description_lines = [] + started = False + for line in lines: + if started: + ended = line.strip().startswith(description_end) + if not ended: + description_lines.append(line) + else: + break + + elif '.description' in line and description_start in line: + started = True + + return '\n'.join(description_lines) diff --git a/tests/packagedcode/data/rubygems/gem/a_okay-0.1.0.gem.json b/tests/packagedcode/data/rubygems/gem/a_okay-0.1.0.gem.json index a537f62fa51..827022b5b9f 100644 --- a/tests/packagedcode/data/rubygems/gem/a_okay-0.1.0.gem.json +++ b/tests/packagedcode/data/rubygems/gem/a_okay-0.1.0.gem.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/a_okay@0.1.0", "repository_homepage_url": "https://rubygems.org/gems/a_okay/versions/0.1.0", "repository_download_url": "https://rubygems.org/downloads/a_okay-0.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/a_okay/versions/0.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/a_okay/versions/0.1.0.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/a_okay@0.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/action_tracker-1.0.2.gem.json b/tests/packagedcode/data/rubygems/gem/action_tracker-1.0.2.gem.json index 0a9d37f5fe4..b360b4d72ca 100644 --- a/tests/packagedcode/data/rubygems/gem/action_tracker-1.0.2.gem.json +++ b/tests/packagedcode/data/rubygems/gem/action_tracker-1.0.2.gem.json @@ -42,8 +42,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -137,9 +137,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/action_tracker@1.0.2", "repository_homepage_url": "https://rubygems.org/gems/action_tracker/versions/1.0.2", "repository_download_url": "https://rubygems.org/downloads/action_tracker-1.0.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/action_tracker/versions/1.0.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/action_tracker/versions/1.0.2.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/action_tracker@1.0.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/archive-tar-minitar-0.5.2.gem.json b/tests/packagedcode/data/rubygems/gem/archive-tar-minitar-0.5.2.gem.json index 1f8a2794854..f160b15fb2a 100644 --- a/tests/packagedcode/data/rubygems/gem/archive-tar-minitar-0.5.2.gem.json +++ b/tests/packagedcode/data/rubygems/gem/archive-tar-minitar-0.5.2.gem.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/archive-tar-minitar@0.5.2", "repository_homepage_url": "https://rubygems.org/gems/archive-tar-minitar/versions/0.5.2", "repository_download_url": "https://rubygems.org/downloads/archive-tar-minitar-0.5.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/archive-tar-minitar/versions/0.5.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/archive-tar-minitar/versions/0.5.2.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/archive-tar-minitar@0.5.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/blankslate-3.1.3.gem.json b/tests/packagedcode/data/rubygems/gem/blankslate-3.1.3.gem.json index 1ea02226bc9..b192f7b3adb 100644 --- a/tests/packagedcode/data/rubygems/gem/blankslate-3.1.3.gem.json +++ b/tests/packagedcode/data/rubygems/gem/blankslate-3.1.3.gem.json @@ -47,8 +47,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -70,9 +70,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/blankslate@3.1.3", "repository_homepage_url": "https://rubygems.org/gems/blankslate/versions/3.1.3", "repository_download_url": "https://rubygems.org/downloads/blankslate-3.1.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/blankslate/versions/3.1.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/blankslate/versions/3.1.3.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/blankslate@3.1.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/m2r-2.1.0.gem.json b/tests/packagedcode/data/rubygems/gem/m2r-2.1.0.gem.json index ec28c8451d1..2d989547095 100644 --- a/tests/packagedcode/data/rubygems/gem/m2r-2.1.0.gem.json +++ b/tests/packagedcode/data/rubygems/gem/m2r-2.1.0.gem.json @@ -56,8 +56,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -178,9 +178,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/m2r@2.1.0", "repository_homepage_url": "https://rubygems.org/gems/m2r/versions/2.1.0", "repository_download_url": "https://rubygems.org/downloads/m2r-2.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/m2r@2.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/mysmallidea-address_standardization-0.4.1.gem.json b/tests/packagedcode/data/rubygems/gem/mysmallidea-address_standardization-0.4.1.gem.json index 24aad48591f..49045ab14a9 100644 --- a/tests/packagedcode/data/rubygems/gem/mysmallidea-address_standardization-0.4.1.gem.json +++ b/tests/packagedcode/data/rubygems/gem/mysmallidea-address_standardization-0.4.1.gem.json @@ -33,8 +33,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -65,9 +65,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/mysmallidea-address_standardization@0.4.1", "repository_homepage_url": "https://rubygems.org/gems/mysmallidea-address_standardization/versions/0.4.1", "repository_download_url": "https://rubygems.org/downloads/mysmallidea-address_standardization-0.4.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-address_standardization/versions/0.4.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-address_standardization/versions/0.4.1.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/mysmallidea-address_standardization@0.4.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/mysmallidea-mad_mimi_mailer-0.0.9.gem.json b/tests/packagedcode/data/rubygems/gem/mysmallidea-mad_mimi_mailer-0.0.9.gem.json index ced976ea424..76888ce4daa 100644 --- a/tests/packagedcode/data/rubygems/gem/mysmallidea-mad_mimi_mailer-0.0.9.gem.json +++ b/tests/packagedcode/data/rubygems/gem/mysmallidea-mad_mimi_mailer-0.0.9.gem.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/mysmallidea-mad_mimi_mailer@0.0.9", "repository_homepage_url": "https://rubygems.org/gems/mysmallidea-mad_mimi_mailer/versions/0.0.9", "repository_download_url": "https://rubygems.org/downloads/mysmallidea-mad_mimi_mailer-0.0.9.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-mad_mimi_mailer/versions/0.0.9.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-mad_mimi_mailer/versions/0.0.9.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/mysmallidea-mad_mimi_mailer@0.0.9" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/new/dependabot-omnibus-0.87.15.gem.json b/tests/packagedcode/data/rubygems/gem/new/dependabot-omnibus-0.87.15.gem.json index cb4da972c4e..dff34d4a474 100644 --- a/tests/packagedcode/data/rubygems/gem/new/dependabot-omnibus-0.87.15.gem.json +++ b/tests/packagedcode/data/rubygems/gem/new/dependabot-omnibus-0.87.15.gem.json @@ -35,8 +35,8 @@ "Nonstandard" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -139,9 +139,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/dependabot-omnibus@0.87.15", "repository_homepage_url": "https://rubygems.org/gems/dependabot-omnibus/versions/0.87.15", "repository_download_url": "https://rubygems.org/downloads/dependabot-omnibus-0.87.15.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/dependabot-omnibus/versions/0.87.15.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/dependabot-omnibus/versions/0.87.15.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/dependabot-omnibus@0.87.15" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/new/hiredis-0.6.3-java.gem.json b/tests/packagedcode/data/rubygems/gem/new/hiredis-0.6.3-java.gem.json index 04259a85787..1ee0df00051 100644 --- a/tests/packagedcode/data/rubygems/gem/new/hiredis-0.6.3-java.gem.json +++ b/tests/packagedcode/data/rubygems/gem/new/hiredis-0.6.3-java.gem.json @@ -37,8 +37,8 @@ "BSD-3-Clause" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -69,9 +69,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/hiredis@0.6.3?platform=java", "repository_homepage_url": "https://rubygems.org/gems/hiredis/versions/0.6.3", "repository_download_url": "https://rubygems.org/downloads/hiredis-0.6.3-java.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/hiredis/versions/0.6.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/hiredis/versions/0.6.3.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/hiredis@0.6.3?platform=java" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/new/int_time-0.0.2.gem.json b/tests/packagedcode/data/rubygems/gem/new/int_time-0.0.2.gem.json index 75ae75ea509..ce649d0f608 100644 --- a/tests/packagedcode/data/rubygems/gem/new/int_time-0.0.2.gem.json +++ b/tests/packagedcode/data/rubygems/gem/new/int_time-0.0.2.gem.json @@ -35,13 +35,14 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/int_time@0.0.2", "repository_homepage_url": "https://rubygems.org/gems/int_time/versions/0.0.2", "repository_download_url": "https://rubygems.org/downloads/int_time-0.0.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/int_time/versions/0.0.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/int_time/versions/0.0.2.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/int_time@0.0.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/new/jaro_winkler-1.5.1-java.gem.json b/tests/packagedcode/data/rubygems/gem/new/jaro_winkler-1.5.1-java.gem.json index 4f64d89a0ff..f31225c6239 100644 --- a/tests/packagedcode/data/rubygems/gem/new/jaro_winkler-1.5.1-java.gem.json +++ b/tests/packagedcode/data/rubygems/gem/new/jaro_winkler-1.5.1-java.gem.json @@ -37,8 +37,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -78,9 +78,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/jaro_winkler@1.5.1?platform=java", "repository_homepage_url": "https://rubygems.org/gems/jaro_winkler/versions/1.5.1", "repository_download_url": "https://rubygems.org/downloads/jaro_winkler-1.5.1-java.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/jaro_winkler/versions/1.5.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/jaro_winkler/versions/1.5.1.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/jaro_winkler@1.5.1?platform=java" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/new/rubocop-0.62.0.gem.json b/tests/packagedcode/data/rubygems/gem/new/rubocop-0.62.0.gem.json index f49c512a972..5fcdac1dacb 100644 --- a/tests/packagedcode/data/rubygems/gem/new/rubocop-0.62.0.gem.json +++ b/tests/packagedcode/data/rubygems/gem/new/rubocop-0.62.0.gem.json @@ -7,7 +7,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Ruby", - "description": "Automatic Ruby code style checking tool.\n Automatic Ruby code style checking tool.\n Aims to enforce the community-driven Ruby Style Guide.\n", + "description": "Automatic Ruby code style checking tool.\n Aims to enforce the community-driven Ruby Style Guide.", "release_date": "2019-01-01", "parties": [ { @@ -33,7 +33,7 @@ } ], "keywords": [], - "homepage_url": "https://github.com/rubocop-hq/rubocop", + "homepage_url": "https://www.rubocop.org/", "download_url": "https://rubygems.org/downloads/rubocop-0.62.0.gem", "size": null, "sha1": null, @@ -49,8 +49,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -135,9 +135,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rubocop@0.62.0", "repository_homepage_url": "https://rubygems.org/gems/rubocop/versions/0.62.0", "repository_download_url": "https://rubygems.org/downloads/rubocop-0.62.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rubocop/versions/0.62.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rubocop/versions/0.62.0.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/rubocop@0.62.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/ng-rails-csrf-0.1.0.gem.json b/tests/packagedcode/data/rubygems/gem/ng-rails-csrf-0.1.0.gem.json index 9171ecf1608..741c5cf92ec 100644 --- a/tests/packagedcode/data/rubygems/gem/ng-rails-csrf-0.1.0.gem.json +++ b/tests/packagedcode/data/rubygems/gem/ng-rails-csrf-0.1.0.gem.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/ng-rails-csrf@0.1.0", "repository_homepage_url": "https://rubygems.org/gems/ng-rails-csrf/versions/0.1.0", "repository_download_url": "https://rubygems.org/downloads/ng-rails-csrf-0.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/ng-rails-csrf/versions/0.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/ng-rails-csrf/versions/0.1.0.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/ng-rails-csrf@0.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/small-0.2.gem.json b/tests/packagedcode/data/rubygems/gem/small-0.2.gem.json index 527b9f6bb40..36ad069f6f2 100644 --- a/tests/packagedcode/data/rubygems/gem/small-0.2.gem.json +++ b/tests/packagedcode/data/rubygems/gem/small-0.2.gem.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/small@0.2", "repository_homepage_url": "https://rubygems.org/gems/small/versions/0.2", "repository_download_url": "https://rubygems.org/downloads/small-0.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/small/versions/0.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/small/versions/0.2.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/small@0.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/small_wonder-0.1.10.gem.json b/tests/packagedcode/data/rubygems/gem/small_wonder-0.1.10.gem.json index 3f2116ee8d0..dc298ff6c38 100644 --- a/tests/packagedcode/data/rubygems/gem/small_wonder-0.1.10.gem.json +++ b/tests/packagedcode/data/rubygems/gem/small_wonder-0.1.10.gem.json @@ -33,8 +33,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -137,9 +137,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/small_wonder@0.1.10", "repository_homepage_url": "https://rubygems.org/gems/small_wonder/versions/0.1.10", "repository_download_url": "https://rubygems.org/downloads/small_wonder-0.1.10.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/small_wonder/versions/0.1.10.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/small_wonder/versions/0.1.10.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/small_wonder@0.1.10" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gem/sprockets-vendor_gems-0.1.3.gem.json b/tests/packagedcode/data/rubygems/gem/sprockets-vendor_gems-0.1.3.gem.json index 7cd0cdab07a..5d33a3d7824 100644 --- a/tests/packagedcode/data/rubygems/gem/sprockets-vendor_gems-0.1.3.gem.json +++ b/tests/packagedcode/data/rubygems/gem/sprockets-vendor_gems-0.1.3.gem.json @@ -33,8 +33,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -83,9 +83,10 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sprockets-vendor_gems@0.1.3", "repository_homepage_url": "https://rubygems.org/gems/sprockets-vendor_gems/versions/0.1.3", "repository_download_url": "https://rubygems.org/downloads/sprockets-vendor_gems-0.1.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets-vendor_gems/versions/0.1.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets-vendor_gems/versions/0.1.3.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/sprockets-vendor_gems@0.1.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemfile-lock/Gemfile.lock.expected b/tests/packagedcode/data/rubygems/gemfile-lock/Gemfile.lock.expected index 6a5e27d2365..fbcf0ca9416 100644 --- a/tests/packagedcode/data/rubygems/gemfile-lock/Gemfile.lock.expected +++ b/tests/packagedcode/data/rubygems/gemfile-lock/Gemfile.lock.expected @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -606,10 +606,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "gemfile_lock", + "purl": null }, { "type": "gem", @@ -624,7 +625,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/actioncable-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -637,8 +638,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -669,10 +670,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/actioncable@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/actioncable/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/actioncable-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/actioncable/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/actioncable/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/actioncable@5.0.6" }, { "type": "gem", @@ -687,7 +689,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/actionpack-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -700,8 +702,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -759,10 +761,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/actionpack@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/actionpack/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/actionpack-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/actionpack/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/actionpack/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/actionpack@5.0.6" }, { "type": "gem", @@ -777,7 +780,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/nio4r-2.1.0.gem", "size": null, "sha1": null, "md5": null, @@ -790,14 +793,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/nio4r@2.1.0", "repository_homepage_url": "https://rubygems.org/gems/nio4r/versions/2.1.0", "repository_download_url": "https://rubygems.org/downloads/nio4r-2.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/nio4r/versions/2.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/nio4r/versions/2.1.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/nio4r@2.1.0" }, { "type": "gem", @@ -812,7 +816,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/websocket-driver-0.6.5.gem", "size": null, "sha1": null, "md5": null, @@ -825,8 +829,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -839,10 +843,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/websocket-driver@0.6.5", "repository_homepage_url": "https://rubygems.org/gems/websocket-driver/versions/0.6.5", "repository_download_url": "https://rubygems.org/downloads/websocket-driver-0.6.5.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/websocket-driver/versions/0.6.5.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/websocket-driver/versions/0.6.5.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/websocket-driver@0.6.5" }, { "type": "gem", @@ -857,7 +862,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/actionmailer-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -870,8 +875,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -920,10 +925,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/actionmailer@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/actionmailer/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/actionmailer-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/actionmailer/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/actionmailer/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/actionmailer@5.0.6" }, { "type": "gem", @@ -938,7 +944,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/actionview-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -951,8 +957,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1001,10 +1007,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/actionview@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/actionview/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/actionview-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/actionview/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/actionview/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/actionview@5.0.6" }, { "type": "gem", @@ -1019,7 +1026,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/activejob-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -1032,8 +1039,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1055,10 +1062,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/activejob@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/activejob/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/activejob-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/activejob/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/activejob/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/activejob@5.0.6" }, { "type": "gem", @@ -1073,7 +1081,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/mail-2.6.6.gem", "size": null, "sha1": null, "md5": null, @@ -1086,8 +1094,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1100,10 +1108,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/mail@2.6.6", "repository_homepage_url": "https://rubygems.org/gems/mail/versions/2.6.6", "repository_download_url": "https://rubygems.org/downloads/mail-2.6.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mail/versions/2.6.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mail/versions/2.6.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/mail@2.6.6" }, { "type": "gem", @@ -1118,7 +1127,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rails-dom-testing-2.0.3.gem", "size": null, "sha1": null, "md5": null, @@ -1131,8 +1140,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1154,10 +1163,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rails-dom-testing@2.0.3", "repository_homepage_url": "https://rubygems.org/gems/rails-dom-testing/versions/2.0.3", "repository_download_url": "https://rubygems.org/downloads/rails-dom-testing-2.0.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rails-dom-testing/versions/2.0.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rails-dom-testing/versions/2.0.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rails-dom-testing@2.0.3" }, { "type": "gem", @@ -1172,7 +1182,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/activesupport-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -1185,8 +1195,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1226,10 +1236,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/activesupport@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/activesupport/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/activesupport-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/activesupport/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/activesupport/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/activesupport@5.0.6" }, { "type": "gem", @@ -1244,7 +1255,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rack-2.0.3.gem", "size": null, "sha1": null, "md5": null, @@ -1257,14 +1268,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/rack@2.0.3", "repository_homepage_url": "https://rubygems.org/gems/rack/versions/2.0.3", "repository_download_url": "https://rubygems.org/downloads/rack-2.0.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rack/versions/2.0.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rack/versions/2.0.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rack@2.0.3" }, { "type": "gem", @@ -1279,7 +1291,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rack-test-0.6.3.gem", "size": null, "sha1": null, "md5": null, @@ -1292,8 +1304,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1306,10 +1318,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rack-test@0.6.3", "repository_homepage_url": "https://rubygems.org/gems/rack-test/versions/0.6.3", "repository_download_url": "https://rubygems.org/downloads/rack-test-0.6.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rack-test/versions/0.6.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rack-test/versions/0.6.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rack-test@0.6.3" }, { "type": "gem", @@ -1324,7 +1337,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rails-html-sanitizer-1.0.3.gem", "size": null, "sha1": null, "md5": null, @@ -1337,8 +1350,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1351,10 +1364,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rails-html-sanitizer@1.0.3", "repository_homepage_url": "https://rubygems.org/gems/rails-html-sanitizer/versions/1.0.3", "repository_download_url": "https://rubygems.org/downloads/rails-html-sanitizer-1.0.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rails-html-sanitizer/versions/1.0.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rails-html-sanitizer/versions/1.0.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rails-html-sanitizer@1.0.3" }, { "type": "gem", @@ -1369,7 +1383,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/builder-3.2.3.gem", "size": null, "sha1": null, "md5": null, @@ -1382,14 +1396,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/builder@3.2.3", "repository_homepage_url": "https://rubygems.org/gems/builder/versions/3.2.3", "repository_download_url": "https://rubygems.org/downloads/builder-3.2.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/builder/versions/3.2.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/builder/versions/3.2.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/builder@3.2.3" }, { "type": "gem", @@ -1404,7 +1419,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/erubis-2.7.0.gem", "size": null, "sha1": null, "md5": null, @@ -1417,14 +1432,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/erubis@2.7.0", "repository_homepage_url": "https://rubygems.org/gems/erubis/versions/2.7.0", "repository_download_url": "https://rubygems.org/downloads/erubis-2.7.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/erubis/versions/2.7.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/erubis/versions/2.7.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/erubis@2.7.0" }, { "type": "gem", @@ -1439,7 +1455,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/globalid-0.4.0.gem", "size": null, "sha1": null, "md5": null, @@ -1452,8 +1468,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1466,10 +1482,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/globalid@0.4.0", "repository_homepage_url": "https://rubygems.org/gems/globalid/versions/0.4.0", "repository_download_url": "https://rubygems.org/downloads/globalid-0.4.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/globalid/versions/0.4.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/globalid/versions/0.4.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/globalid@0.4.0" }, { "type": "gem", @@ -1484,7 +1501,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/activemodel-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -1497,8 +1514,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1511,10 +1528,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/activemodel@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/activemodel/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/activemodel-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/activemodel/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/activemodel/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/activemodel@5.0.6" }, { "type": "gem", @@ -1529,7 +1547,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/activerecord-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -1542,8 +1560,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1574,10 +1592,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/activerecord@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/activerecord/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/activerecord-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/activerecord/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/activerecord/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/activerecord@5.0.6" }, { "type": "gem", @@ -1592,7 +1611,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/arel-7.1.4.gem", "size": null, "sha1": null, "md5": null, @@ -1605,14 +1624,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/arel@7.1.4", "repository_homepage_url": "https://rubygems.org/gems/arel/versions/7.1.4", "repository_download_url": "https://rubygems.org/downloads/arel-7.1.4.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/arel/versions/7.1.4.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/arel/versions/7.1.4.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/arel@7.1.4" }, { "type": "gem", @@ -1627,7 +1647,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/concurrent-ruby-1.0.5.gem", "size": null, "sha1": null, "md5": null, @@ -1640,14 +1660,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/concurrent-ruby@1.0.5", "repository_homepage_url": "https://rubygems.org/gems/concurrent-ruby/versions/1.0.5", "repository_download_url": "https://rubygems.org/downloads/concurrent-ruby-1.0.5.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/concurrent-ruby/versions/1.0.5.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/concurrent-ruby/versions/1.0.5.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/concurrent-ruby@1.0.5" }, { "type": "gem", @@ -1662,7 +1683,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/i18n-0.8.6.gem", "size": null, "sha1": null, "md5": null, @@ -1675,14 +1696,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/i18n@0.8.6", "repository_homepage_url": "https://rubygems.org/gems/i18n/versions/0.8.6", "repository_download_url": "https://rubygems.org/downloads/i18n-0.8.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/i18n/versions/0.8.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/i18n/versions/0.8.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/i18n@0.8.6" }, { "type": "gem", @@ -1697,7 +1719,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/minitest-5.10.3.gem", "size": null, "sha1": null, "md5": null, @@ -1710,14 +1732,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/minitest@5.10.3", "repository_homepage_url": "https://rubygems.org/gems/minitest/versions/5.10.3", "repository_download_url": "https://rubygems.org/downloads/minitest-5.10.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/minitest/versions/5.10.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/minitest/versions/5.10.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/minitest@5.10.3" }, { "type": "gem", @@ -1732,7 +1755,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/tzinfo-1.2.3.gem", "size": null, "sha1": null, "md5": null, @@ -1745,8 +1768,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1759,10 +1782,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/tzinfo@1.2.3", "repository_homepage_url": "https://rubygems.org/gems/tzinfo/versions/1.2.3", "repository_download_url": "https://rubygems.org/downloads/tzinfo-1.2.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/tzinfo/versions/1.2.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/tzinfo/versions/1.2.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/tzinfo@1.2.3" }, { "type": "gem", @@ -1777,7 +1801,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/bindex-0.5.0.gem", "size": null, "sha1": null, "md5": null, @@ -1790,14 +1814,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/bindex@0.5.0", "repository_homepage_url": "https://rubygems.org/gems/bindex/versions/0.5.0", "repository_download_url": "https://rubygems.org/downloads/bindex-0.5.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/bindex/versions/0.5.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/bindex/versions/0.5.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/bindex@0.5.0" }, { "type": "gem", @@ -1812,7 +1837,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/byebug-9.1.0.gem", "size": null, "sha1": null, "md5": null, @@ -1825,14 +1850,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/byebug@9.1.0", "repository_homepage_url": "https://rubygems.org/gems/byebug/versions/9.1.0", "repository_download_url": "https://rubygems.org/downloads/byebug-9.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/byebug/versions/9.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/byebug/versions/9.1.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/byebug@9.1.0" }, { "type": "gem", @@ -1847,7 +1873,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/coffee-rails-4.2.2.gem", "size": null, "sha1": null, "md5": null, @@ -1860,8 +1886,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1883,10 +1909,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/coffee-rails@4.2.2", "repository_homepage_url": "https://rubygems.org/gems/coffee-rails/versions/4.2.2", "repository_download_url": "https://rubygems.org/downloads/coffee-rails-4.2.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-rails/versions/4.2.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-rails/versions/4.2.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/coffee-rails@4.2.2" }, { "type": "gem", @@ -1901,7 +1928,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/coffee-script-2.4.1.gem", "size": null, "sha1": null, "md5": null, @@ -1914,8 +1941,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1937,10 +1964,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/coffee-script@2.4.1", "repository_homepage_url": "https://rubygems.org/gems/coffee-script/versions/2.4.1", "repository_download_url": "https://rubygems.org/downloads/coffee-script-2.4.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-script/versions/2.4.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-script/versions/2.4.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/coffee-script@2.4.1" }, { "type": "gem", @@ -1955,7 +1983,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/railties-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -1968,8 +1996,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2018,10 +2046,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/railties@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/railties/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/railties-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/railties/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/railties/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/railties@5.0.6" }, { "type": "gem", @@ -2036,7 +2065,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/coffee-script-source-1.12.2.gem", "size": null, "sha1": null, "md5": null, @@ -2049,14 +2078,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/coffee-script-source@1.12.2", "repository_homepage_url": "https://rubygems.org/gems/coffee-script-source/versions/1.12.2", "repository_download_url": "https://rubygems.org/downloads/coffee-script-source-1.12.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-script-source/versions/1.12.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/coffee-script-source/versions/1.12.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/coffee-script-source@1.12.2" }, { "type": "gem", @@ -2071,7 +2101,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/execjs-2.7.0.gem", "size": null, "sha1": null, "md5": null, @@ -2084,14 +2114,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/execjs@2.7.0", "repository_homepage_url": "https://rubygems.org/gems/execjs/versions/2.7.0", "repository_download_url": "https://rubygems.org/downloads/execjs-2.7.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/execjs/versions/2.7.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/execjs/versions/2.7.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/execjs@2.7.0" }, { "type": "gem", @@ -2106,7 +2137,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/crass-1.0.2.gem", "size": null, "sha1": null, "md5": null, @@ -2119,14 +2150,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/crass@1.0.2", "repository_homepage_url": "https://rubygems.org/gems/crass/versions/1.0.2", "repository_download_url": "https://rubygems.org/downloads/crass-1.0.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/crass/versions/1.0.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/crass/versions/1.0.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/crass@1.0.2" }, { "type": "gem", @@ -2141,7 +2173,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/ffi-1.9.18.gem", "size": null, "sha1": null, "md5": null, @@ -2154,14 +2186,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/ffi@1.9.18", "repository_homepage_url": "https://rubygems.org/gems/ffi/versions/1.9.18", "repository_download_url": "https://rubygems.org/downloads/ffi-1.9.18.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/ffi/versions/1.9.18.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/ffi/versions/1.9.18.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/ffi@1.9.18" }, { "type": "gem", @@ -2176,7 +2209,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/jbuilder-2.7.0.gem", "size": null, "sha1": null, "md5": null, @@ -2189,8 +2222,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2212,10 +2245,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/jbuilder@2.7.0", "repository_homepage_url": "https://rubygems.org/gems/jbuilder/versions/2.7.0", "repository_download_url": "https://rubygems.org/downloads/jbuilder-2.7.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/jbuilder/versions/2.7.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/jbuilder/versions/2.7.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/jbuilder@2.7.0" }, { "type": "gem", @@ -2230,7 +2264,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/multi_json-1.12.2.gem", "size": null, "sha1": null, "md5": null, @@ -2243,14 +2277,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/multi_json@1.12.2", "repository_homepage_url": "https://rubygems.org/gems/multi_json/versions/1.12.2", "repository_download_url": "https://rubygems.org/downloads/multi_json-1.12.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/multi_json/versions/1.12.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/multi_json/versions/1.12.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/multi_json@1.12.2" }, { "type": "gem", @@ -2265,7 +2300,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/jquery-rails-4.3.1.gem", "size": null, "sha1": null, "md5": null, @@ -2278,8 +2313,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2310,10 +2345,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/jquery-rails@4.3.1", "repository_homepage_url": "https://rubygems.org/gems/jquery-rails/versions/4.3.1", "repository_download_url": "https://rubygems.org/downloads/jquery-rails-4.3.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/jquery-rails/versions/4.3.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/jquery-rails/versions/4.3.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/jquery-rails@4.3.1" }, { "type": "gem", @@ -2328,7 +2364,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/thor-0.20.0.gem", "size": null, "sha1": null, "md5": null, @@ -2341,14 +2377,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/thor@0.20.0", "repository_homepage_url": "https://rubygems.org/gems/thor/versions/0.20.0", "repository_download_url": "https://rubygems.org/downloads/thor-0.20.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/thor/versions/0.20.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/thor/versions/0.20.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/thor@0.20.0" }, { "type": "gem", @@ -2363,7 +2400,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/listen-3.0.8.gem", "size": null, "sha1": null, "md5": null, @@ -2376,8 +2413,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2399,10 +2436,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/listen@3.0.8", "repository_homepage_url": "https://rubygems.org/gems/listen/versions/3.0.8", "repository_download_url": "https://rubygems.org/downloads/listen-3.0.8.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/listen/versions/3.0.8.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/listen/versions/3.0.8.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/listen@3.0.8" }, { "type": "gem", @@ -2417,7 +2455,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rb-fsevent-0.10.2.gem", "size": null, "sha1": null, "md5": null, @@ -2430,14 +2468,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/rb-fsevent@0.10.2", "repository_homepage_url": "https://rubygems.org/gems/rb-fsevent/versions/0.10.2", "repository_download_url": "https://rubygems.org/downloads/rb-fsevent-0.10.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rb-fsevent/versions/0.10.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rb-fsevent/versions/0.10.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rb-fsevent@0.10.2" }, { "type": "gem", @@ -2452,7 +2491,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rb-inotify-0.9.10.gem", "size": null, "sha1": null, "md5": null, @@ -2465,8 +2504,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2479,10 +2518,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rb-inotify@0.9.10", "repository_homepage_url": "https://rubygems.org/gems/rb-inotify/versions/0.9.10", "repository_download_url": "https://rubygems.org/downloads/rb-inotify-0.9.10.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rb-inotify/versions/0.9.10.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rb-inotify/versions/0.9.10.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rb-inotify@0.9.10" }, { "type": "gem", @@ -2497,7 +2537,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/loofah-2.1.1.gem", "size": null, "sha1": null, "md5": null, @@ -2510,8 +2550,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2533,10 +2573,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/loofah@2.1.1", "repository_homepage_url": "https://rubygems.org/gems/loofah/versions/2.1.1", "repository_download_url": "https://rubygems.org/downloads/loofah-2.1.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/loofah/versions/2.1.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/loofah/versions/2.1.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/loofah@2.1.1" }, { "type": "gem", @@ -2551,7 +2592,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/nokogiri-1.8.1.gem", "size": null, "sha1": null, "md5": null, @@ -2564,8 +2605,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2578,10 +2619,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/nokogiri@1.8.1", "repository_homepage_url": "https://rubygems.org/gems/nokogiri/versions/1.8.1", "repository_download_url": "https://rubygems.org/downloads/nokogiri-1.8.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/nokogiri/versions/1.8.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/nokogiri/versions/1.8.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/nokogiri@1.8.1" }, { "type": "gem", @@ -2596,7 +2638,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/mime-types-3.1.gem", "size": null, "sha1": null, "md5": null, @@ -2609,8 +2651,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2623,10 +2665,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/mime-types@3.1", "repository_homepage_url": "https://rubygems.org/gems/mime-types/versions/3.1", "repository_download_url": "https://rubygems.org/downloads/mime-types-3.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mime-types/versions/3.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mime-types/versions/3.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/mime-types@3.1" }, { "type": "gem", @@ -2641,7 +2684,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/method_source-0.9.0.gem", "size": null, "sha1": null, "md5": null, @@ -2654,14 +2697,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/method_source@0.9.0", "repository_homepage_url": "https://rubygems.org/gems/method_source/versions/0.9.0", "repository_download_url": "https://rubygems.org/downloads/method_source-0.9.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/method_source/versions/0.9.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/method_source/versions/0.9.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/method_source@0.9.0" }, { "type": "gem", @@ -2676,7 +2720,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/mime-types-data-3.2016.0521.gem", "size": null, "sha1": null, "md5": null, @@ -2689,14 +2733,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/mime-types-data@3.2016.0521", "repository_homepage_url": "https://rubygems.org/gems/mime-types-data/versions/3.2016.0521", "repository_download_url": "https://rubygems.org/downloads/mime-types-data-3.2016.0521.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mime-types-data/versions/3.2016.0521.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mime-types-data/versions/3.2016.0521.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/mime-types-data@3.2016.0521" }, { "type": "gem", @@ -2711,7 +2756,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/mini_portile2-2.3.0.gem", "size": null, "sha1": null, "md5": null, @@ -2724,14 +2769,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/mini_portile2@2.3.0", "repository_homepage_url": "https://rubygems.org/gems/mini_portile2/versions/2.3.0", "repository_download_url": "https://rubygems.org/downloads/mini_portile2-2.3.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mini_portile2/versions/2.3.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mini_portile2/versions/2.3.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/mini_portile2@2.3.0" }, { "type": "gem", @@ -2746,7 +2792,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/puma-3.10.0.gem", "size": null, "sha1": null, "md5": null, @@ -2759,14 +2805,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/puma@3.10.0", "repository_homepage_url": "https://rubygems.org/gems/puma/versions/3.10.0", "repository_download_url": "https://rubygems.org/downloads/puma-3.10.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/puma/versions/3.10.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/puma/versions/3.10.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/puma@3.10.0" }, { "type": "gem", @@ -2781,7 +2828,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rails-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -2794,8 +2841,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2889,10 +2936,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/rails@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/rails/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/rails-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rails/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rails/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rails@5.0.6" }, { "type": "gem", @@ -2907,7 +2955,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sprockets-rails-3.2.1.gem", "size": null, "sha1": null, "md5": null, @@ -2920,8 +2968,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2952,10 +3000,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sprockets-rails@3.2.1", "repository_homepage_url": "https://rubygems.org/gems/sprockets-rails/versions/3.2.1", "repository_download_url": "https://rubygems.org/downloads/sprockets-rails-3.2.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets-rails/versions/3.2.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets-rails/versions/3.2.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sprockets-rails@3.2.1" }, { "type": "gem", @@ -2970,7 +3019,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/rake-12.1.0.gem", "size": null, "sha1": null, "md5": null, @@ -2983,14 +3032,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/rake@12.1.0", "repository_homepage_url": "https://rubygems.org/gems/rake/versions/12.1.0", "repository_download_url": "https://rubygems.org/downloads/rake-12.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rake/versions/12.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rake/versions/12.1.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/rake@12.1.0" }, { "type": "gem", @@ -3005,7 +3055,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sass-3.5.2.gem", "size": null, "sha1": null, "md5": null, @@ -3018,8 +3068,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3032,10 +3082,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sass@3.5.2", "repository_homepage_url": "https://rubygems.org/gems/sass/versions/3.5.2", "repository_download_url": "https://rubygems.org/downloads/sass-3.5.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sass/versions/3.5.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sass/versions/3.5.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sass@3.5.2" }, { "type": "gem", @@ -3050,7 +3101,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sass-listen-4.0.0.gem", "size": null, "sha1": null, "md5": null, @@ -3063,8 +3114,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3086,10 +3137,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sass-listen@4.0.0", "repository_homepage_url": "https://rubygems.org/gems/sass-listen/versions/4.0.0", "repository_download_url": "https://rubygems.org/downloads/sass-listen-4.0.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sass-listen/versions/4.0.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sass-listen/versions/4.0.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sass-listen@4.0.0" }, { "type": "gem", @@ -3104,7 +3156,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sass-rails-5.0.6.gem", "size": null, "sha1": null, "md5": null, @@ -3117,8 +3169,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3167,10 +3219,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sass-rails@5.0.6", "repository_homepage_url": "https://rubygems.org/gems/sass-rails/versions/5.0.6", "repository_download_url": "https://rubygems.org/downloads/sass-rails-5.0.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sass-rails/versions/5.0.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sass-rails/versions/5.0.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sass-rails@5.0.6" }, { "type": "gem", @@ -3185,7 +3238,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sprockets-3.7.1.gem", "size": null, "sha1": null, "md5": null, @@ -3198,8 +3251,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3221,10 +3274,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/sprockets@3.7.1", "repository_homepage_url": "https://rubygems.org/gems/sprockets/versions/3.7.1", "repository_download_url": "https://rubygems.org/downloads/sprockets-3.7.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets/versions/3.7.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sprockets/versions/3.7.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sprockets@3.7.1" }, { "type": "gem", @@ -3239,7 +3293,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/tilt-2.0.8.gem", "size": null, "sha1": null, "md5": null, @@ -3252,14 +3306,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/tilt@2.0.8", "repository_homepage_url": "https://rubygems.org/gems/tilt/versions/2.0.8", "repository_download_url": "https://rubygems.org/downloads/tilt-2.0.8.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/tilt/versions/2.0.8.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/tilt/versions/2.0.8.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/tilt@2.0.8" }, { "type": "gem", @@ -3274,7 +3329,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/spring-2.0.2.gem", "size": null, "sha1": null, "md5": null, @@ -3287,8 +3342,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3301,10 +3356,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/spring@2.0.2", "repository_homepage_url": "https://rubygems.org/gems/spring/versions/2.0.2", "repository_download_url": "https://rubygems.org/downloads/spring-2.0.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/spring/versions/2.0.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/spring/versions/2.0.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/spring@2.0.2" }, { "type": "gem", @@ -3319,7 +3375,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/spring-watcher-listen-2.0.1.gem", "size": null, "sha1": null, "md5": null, @@ -3332,8 +3388,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3355,10 +3411,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/spring-watcher-listen@2.0.1", "repository_homepage_url": "https://rubygems.org/gems/spring-watcher-listen/versions/2.0.1", "repository_download_url": "https://rubygems.org/downloads/spring-watcher-listen-2.0.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/spring-watcher-listen/versions/2.0.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/spring-watcher-listen/versions/2.0.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/spring-watcher-listen@2.0.1" }, { "type": "gem", @@ -3373,7 +3430,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/sqlite3-1.3.13.gem", "size": null, "sha1": null, "md5": null, @@ -3386,14 +3443,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/sqlite3@1.3.13", "repository_homepage_url": "https://rubygems.org/gems/sqlite3/versions/1.3.13", "repository_download_url": "https://rubygems.org/downloads/sqlite3-1.3.13.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/sqlite3/versions/1.3.13.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/sqlite3/versions/1.3.13.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/sqlite3@1.3.13" }, { "type": "gem", @@ -3408,7 +3466,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/thread_safe-0.3.6.gem", "size": null, "sha1": null, "md5": null, @@ -3421,14 +3479,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/thread_safe@0.3.6", "repository_homepage_url": "https://rubygems.org/gems/thread_safe/versions/0.3.6", "repository_download_url": "https://rubygems.org/downloads/thread_safe-0.3.6.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/thread_safe/versions/0.3.6.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/thread_safe/versions/0.3.6.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/thread_safe@0.3.6" }, { "type": "gem", @@ -3443,7 +3502,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/turbolinks-5.0.1.gem", "size": null, "sha1": null, "md5": null, @@ -3456,8 +3515,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3470,10 +3529,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/turbolinks@5.0.1", "repository_homepage_url": "https://rubygems.org/gems/turbolinks/versions/5.0.1", "repository_download_url": "https://rubygems.org/downloads/turbolinks-5.0.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/turbolinks/versions/5.0.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/turbolinks/versions/5.0.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/turbolinks@5.0.1" }, { "type": "gem", @@ -3488,7 +3548,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/turbolinks-source-5.0.3.gem", "size": null, "sha1": null, "md5": null, @@ -3501,14 +3561,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/turbolinks-source@5.0.3", "repository_homepage_url": "https://rubygems.org/gems/turbolinks-source/versions/5.0.3", "repository_download_url": "https://rubygems.org/downloads/turbolinks-source-5.0.3.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/turbolinks-source/versions/5.0.3.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/turbolinks-source/versions/5.0.3.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/turbolinks-source@5.0.3" }, { "type": "gem", @@ -3523,7 +3584,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/uglifier-3.2.0.gem", "size": null, "sha1": null, "md5": null, @@ -3536,8 +3597,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3550,10 +3611,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/uglifier@3.2.0", "repository_homepage_url": "https://rubygems.org/gems/uglifier/versions/3.2.0", "repository_download_url": "https://rubygems.org/downloads/uglifier-3.2.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/uglifier/versions/3.2.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/uglifier/versions/3.2.0.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/uglifier@3.2.0" }, { "type": "gem", @@ -3568,7 +3630,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/web-console-3.5.1.gem", "size": null, "sha1": null, "md5": null, @@ -3581,8 +3643,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3622,10 +3684,11 @@ "resolved_package": {} } ], - "purl": "pkg:gem/web-console@3.5.1", "repository_homepage_url": "https://rubygems.org/gems/web-console/versions/3.5.1", "repository_download_url": "https://rubygems.org/downloads/web-console-3.5.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/web-console/versions/3.5.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/web-console/versions/3.5.1.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/web-console@3.5.1" }, { "type": "gem", @@ -3640,7 +3703,7 @@ "parties": [], "keywords": [], "homepage_url": null, - "download_url": null, + "download_url": "https://rubygems.org/downloads/websocket-extensions-0.1.2.gem", "size": null, "sha1": null, "md5": null, @@ -3653,14 +3716,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/websocket-extensions@0.1.2", "repository_homepage_url": "https://rubygems.org/gems/websocket-extensions/versions/0.1.2", "repository_download_url": "https://rubygems.org/downloads/websocket-extensions-0.1.2.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/websocket-extensions/versions/0.1.2.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/websocket-extensions/versions/0.1.2.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/websocket-extensions@0.1.2" }, { "type": "gem", @@ -3688,13 +3752,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/tzinfo-data", "repository_homepage_url": "https://rubygems.org/gems/tzinfo-data", "repository_download_url": null, - "api_data_url": "https://rubygems.org/api/v1/versions/tzinfo-data.json" + "api_data_url": "https://rubygems.org/api/v1/versions/tzinfo-data.json", + "datasource_id": "gemfile_lock", + "purl": "pkg:gem/tzinfo-data" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemfile-lock/complex/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile-lock/complex/Gemfile.lock new file mode 100644 index 00000000000..586fe738649 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile-lock/complex/Gemfile.lock @@ -0,0 +1,640 @@ +GIT + remote: https://github.com/QueueClassic/queue_classic.git + revision: 1e40ddd810c416619ead88316b2b251936ee2495 + specs: + queue_classic (4.0.0.pre.alpha1) + pg (>= 0.17, < 2.0) + +GIT + remote: https://github.com/brianmario/mysql2.git + revision: e2503dc6e8ad02f8c2f4fc71006f9840694e319c + specs: + mysql2 (0.5.3) + +GIT + remote: https://github.com/matthewd/websocket-client-simple.git + revision: e161305f1a466b9398d86df3b1731b03362da91b + branch: close-race + specs: + websocket-client-simple (0.3.0) + event_emitter + websocket + +PATH + remote: . + specs: + actioncable (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + activejob (= 7.0.0.alpha) + activerecord (= 7.0.0.alpha) + activestorage (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + mail (>= 2.7.1) + actionmailer (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + actionview (= 7.0.0.alpha) + activejob (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (7.0.0.alpha) + actionview (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + activerecord (= 7.0.0.alpha) + activestorage (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + nokogiri (>= 1.8.5) + actionview (7.0.0.alpha) + activesupport (= 7.0.0.alpha) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (7.0.0.alpha) + activesupport (= 7.0.0.alpha) + globalid (>= 0.3.6) + activemodel (7.0.0.alpha) + activesupport (= 7.0.0.alpha) + activerecord (7.0.0.alpha) + activemodel (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + activestorage (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + activejob (= 7.0.0.alpha) + activerecord (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + marcel (~> 0.3.1) + mimemagic (~> 0.3.2) + activesupport (7.0.0.alpha) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + rails (7.0.0.alpha) + actioncable (= 7.0.0.alpha) + actionmailbox (= 7.0.0.alpha) + actionmailer (= 7.0.0.alpha) + actionpack (= 7.0.0.alpha) + actiontext (= 7.0.0.alpha) + actionview (= 7.0.0.alpha) + activejob (= 7.0.0.alpha) + activemodel (= 7.0.0.alpha) + activerecord (= 7.0.0.alpha) + activestorage (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + bundler (>= 1.15.0) + railties (= 7.0.0.alpha) + sprockets-rails (>= 2.0.0) + railties (7.0.0.alpha) + actionpack (= 7.0.0.alpha) + activesupport (= 7.0.0.alpha) + method_source + rake (>= 0.8.7) + thor (~> 1.0) + +GEM + remote: https://rubygems.org/ + specs: + activerecord-jdbc-adapter (61.0-java) + activerecord (~> 6.1.0) + activerecord-jdbcmysql-adapter (61.0-java) + activerecord-jdbc-adapter (= 61.0) + jdbc-mysql (~> 5.1.36, < 9) + activerecord-jdbcpostgresql-adapter (61.0-java) + activerecord-jdbc-adapter (= 61.0) + jdbc-postgres (>= 9.4, < 43) + activerecord-jdbcsqlite3-adapter (61.0-java) + activerecord-jdbc-adapter (= 61.0) + jdbc-sqlite3 (~> 3.8, < 3.30) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + amq-protocol (2.3.2) + ansi (1.5.0) + ast (2.4.1) + aws-eventstream (1.1.0) + aws-partitions (1.417.0) + aws-sdk-core (3.111.2) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.41.0) + aws-sdk-core (~> 3, >= 3.109.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.87.0) + aws-sdk-core (~> 3, >= 3.109.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.1) + aws-sdk-sns (1.37.0) + aws-sdk-core (~> 3, >= 3.109.0) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.2.2) + aws-eventstream (~> 1, >= 1.0.2) + azure-storage-blob (2.0.1) + azure-storage-common (~> 2.0) + nokogiri (~> 1.11.0.rc2) + azure-storage-common (2.0.2) + faraday (~> 1.0) + faraday_middleware (~> 1.0.0.rc1) + net-http-persistent (~> 4.0) + nokogiri (~> 1.11.0.rc2) + backburner (1.5.0) + beaneater (~> 1.0) + concurrent-ruby (~> 1.0, >= 1.0.1) + dante (> 0.1.5) + bcrypt (3.1.16) + bcrypt (3.1.16-java) + beaneater (1.0.0) + benchmark-ips (2.8.4) + blade (0.7.1) + activesupport (>= 3.0.0) + blade-qunit_adapter (~> 2.0.1) + coffee-script + coffee-script-source + curses (~> 1.0.0) + eventmachine + faye + sprockets (>= 3.0) + thin (>= 1.6.0) + thor (>= 0.19.1) + useragent (~> 0.16.7) + blade-qunit_adapter (2.0.1) + bootsnap (1.5.1) + msgpack (~> 1.0) + bootsnap (1.5.1-java) + msgpack (~> 1.0) + builder (3.2.4) + bunny (2.17.0) + amq-protocol (~> 2.3, >= 2.3.1) + byebug (11.1.3) + capybara (3.34.0) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (~> 1.5) + xpath (~> 3.2) + childprocess (4.0.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.1.8) + connection_pool (2.2.3) + cookiejar (0.3.3) + crack (0.4.5) + rexml + crass (1.0.6) + curses (1.0.2) + daemons (1.3.1) + dalli (2.7.11) + dante (0.2.0) + declarative (0.0.20) + declarative-option (0.1.0) + delayed_job (4.1.9) + activesupport (>= 3.0, < 6.2) + delayed_job_active_record (4.1.5) + activerecord (>= 3.0, < 6.2) + delayed_job (>= 3.0, < 5) + digest-crc (0.6.3) + rake (>= 12.0.0, < 14.0.0) + em-http-request (1.1.7) + addressable (>= 2.3.4) + cookiejar (!= 0.3.1) + em-socksify (>= 0.3) + eventmachine (>= 1.0.3) + http_parser.rb (>= 0.6.0) + em-socksify (0.3.2) + eventmachine (>= 1.0.0.beta.4) + erubi (1.10.0) + et-orbi (1.2.4) + tzinfo + event_emitter (0.2.6) + eventmachine (1.2.7) + execjs (2.7.0) + faraday (1.3.0) + faraday-net_http (~> 1.0) + multipart-post (>= 1.2, < 3) + ruby2_keywords + faraday-net_http (1.0.1) + faraday_middleware (1.0.0) + faraday (~> 1.0) + faye (1.4.0) + cookiejar (>= 0.3.0) + em-http-request (>= 1.1.6) + eventmachine (>= 0.12.0) + faye-websocket (>= 0.11.0) + multi_json (>= 1.0.0) + rack (>= 1.0.0) + websocket-driver (>= 0.5.1) + faye-websocket (0.11.0) + eventmachine (>= 0.12.0) + websocket-driver (>= 0.5.1) + ffi (1.14.2) + ffi (1.14.2-java) + ffi (1.14.2-x64-mingw32) + ffi (1.14.2-x86-mingw32) + fugit (1.4.2) + et-orbi (~> 1.1, >= 1.1.8) + raabro (~> 1.4) + globalid (0.4.2) + activesupport (>= 4.2.0) + google-apis-core (0.2.0) + addressable (~> 2.5, >= 2.5.1) + googleauth (~> 0.14) + httpclient (>= 2.8.1, < 3.0) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) + rexml + signet (~> 0.14) + google-apis-iamcredentials_v1 (0.1.0) + google-apis-core (~> 0.1) + google-apis-storage_v1 (0.1.0) + google-apis-core (~> 0.1) + google-cloud-core (1.5.0) + google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.4.0) + faraday (>= 0.17.3, < 2.0) + google-cloud-errors (1.0.1) + google-cloud-storage (1.30.0) + addressable (~> 2.5) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.1) + google-cloud-core (~> 1.2) + googleauth (~> 0.9) + mini_mime (~> 1.0) + googleauth (0.14.0) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.14) + hashdiff (1.0.1) + hiredis (0.6.3) + hiredis (0.6.3-java) + http_parser.rb (0.6.0) + httpclient (2.8.3) + i18n (1.8.7) + concurrent-ruby (~> 1.0) + image_processing (1.12.1) + mini_magick (>= 4.9.5, < 5) + ruby-vips (>= 2.0.17, < 3) + jdbc-mysql (5.1.47) + jdbc-postgres (42.2.14) + jdbc-sqlite3 (3.28.0) + jmespath (1.4.0) + json (2.5.1) + json (2.5.1-java) + jwt (2.2.2) + kindlerb (1.2.0) + mustache + nokogiri + libxml-ruby (3.2.1) + listen (3.4.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.9.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (0.3.3) + mimemagic (~> 0.3.2) + memoist (0.16.2) + method_source (1.0.0) + mimemagic (0.3.5) + mini_magick (4.11.0) + mini_mime (1.0.2) + mini_portile2 (2.5.0) + minitest (5.14.3) + minitest-bisect (1.5.1) + minitest-server (~> 1.0) + path_expander (~> 1.1) + minitest-reporters (1.4.2) + ansi + builder + minitest (>= 5.0) + ruby-progressbar + minitest-retry (0.2.1) + minitest (>= 5.0) + minitest-server (1.0.6) + minitest (~> 5.0) + mono_logger (1.1.0) + msgpack (1.3.3) + msgpack (1.3.3-java) + msgpack (1.3.3-x64-mingw32) + msgpack (1.3.3-x86-mingw32) + multi_json (1.15.0) + multipart-post (2.1.1) + mustache (1.1.1) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) + net-http-persistent (4.0.1) + connection_pool (~> 2.2) + nio4r (2.5.4) + nio4r (2.5.4-java) + nokogiri (1.11.1) + mini_portile2 (~> 2.5.0) + racc (~> 1.4) + nokogiri (1.11.1-java) + racc (~> 1.4) + nokogiri (1.11.1-x64-mingw32) + racc (~> 1.4) + nokogiri (1.11.1-x86-mingw32) + racc (~> 1.4) + nokogiri (1.11.1-x86_64-darwin) + racc (~> 1.4) + os (1.1.1) + parallel (1.20.1) + parser (3.0.0.0) + ast (~> 2.4.1) + path_expander (1.1.0) + pg (1.2.3) + pg (1.2.3-x64-mingw32) + pg (1.2.3-x86-mingw32) + psych (3.3.0) + public_suffix (4.0.6) + puma (5.1.1) + nio4r (~> 2.0) + puma (5.1.1-java) + nio4r (~> 2.0) + que (0.14.3) + qunit-selenium (0.0.4) + selenium-webdriver + thor + raabro (1.4.0) + racc (1.5.2) + rack (2.2.3) + rack-cache (1.12.1) + rack (>= 0.4) + rack-protection (2.1.0) + rack + rack-proxy (0.6.5) + rack + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) + rainbow (3.0.0) + rake (13.0.3) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + rdoc (6.3.0) + redcarpet (3.2.3) + redis (4.2.5) + redis-namespace (1.8.1) + redis (>= 3.0.4) + regexp_parser (1.8.2) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + resque (2.0.0) + mono_logger (~> 1.0) + multi_json (~> 1.0) + redis-namespace (~> 1.6) + sinatra (>= 0.9.2) + vegas (~> 0.1.2) + resque-scheduler (4.4.0) + mono_logger (~> 1.0) + redis (>= 3.3) + resque (>= 1.26) + rufus-scheduler (~> 3.2) + retriable (3.1.2) + rexml (3.2.4) + rouge (3.26.0) + rubocop (1.8.1) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.2.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.4.0) + parser (>= 2.7.1.5) + rubocop-packaging (0.5.1) + rubocop (>= 0.89, < 2.0) + rubocop-performance (1.9.2) + rubocop (>= 0.90.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rails (2.9.1) + activesupport (>= 4.2.0) + rack (>= 1.1) + rubocop (>= 0.90.0, < 2.0) + ruby-progressbar (1.11.0) + ruby-vips (2.0.17) + ffi (~> 1.9) + ruby2_keywords (0.0.4) + rubyzip (2.3.0) + rufus-scheduler (3.7.0) + fugit (~> 1.1, >= 1.1.6) + sass-rails (6.0.0) + sassc-rails (~> 2.1, >= 2.1.1) + sassc (2.4.0) + ffi (~> 1.9) + sassc (2.4.0-x64-mingw32) + ffi (~> 1.9) + sassc-rails (2.1.2) + railties (>= 4.0.0) + sassc (>= 2.0) + sprockets (> 3.0) + sprockets-rails + tilt + sdoc (2.0.4) + rdoc (>= 5.0) + selenium-webdriver (4.0.0.alpha7) + childprocess (>= 0.5, < 5.0) + rubyzip (>= 1.2.2) + websocket (~> 1.0) + semantic_range (2.3.1) + sequel (5.40.0) + serverengine (2.0.7) + sigdump (~> 0.2.2) + sidekiq (6.1.3) + connection_pool (>= 2.2.2) + rack (~> 2.0) + redis (>= 4.2.0) + sigdump (0.2.4) + signet (0.14.0) + addressable (~> 2.3) + faraday (>= 0.17.3, < 2.0) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + sinatra (2.1.0) + mustermann (~> 1.0) + rack (~> 2.2) + rack-protection (= 2.1.0) + tilt (~> 2.0) + sneakers (2.11.0) + bunny (~> 2.12) + concurrent-ruby (~> 1.0) + rake + serverengine (~> 2.0.5) + thor + sprockets (4.0.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-export (1.0.0) + sprockets-rails (3.2.2) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.4.2) + stackprof (0.2.16) + sucker_punch (2.1.2) + concurrent-ruby (~> 1.0) + thin (1.8.0) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) + thor (1.1.0) + tilt (2.0.10) + turbolinks (5.2.1) + turbolinks-source (~> 5.2) + turbolinks-source (5.2.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + tzinfo-data (1.2020.6) + tzinfo (>= 1.0.0) + uber (0.1.0) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unicode-display_width (2.0.0) + useragent (0.16.10) + vegas (0.1.11) + rack (>= 1.0.0) + w3c_validators (1.3.6) + json (>= 1.8) + nokogiri (~> 1.6) + rexml (~> 3.2) + wdm (0.1.1) + webdrivers (4.5.0) + nokogiri (~> 1.6) + rubyzip (>= 1.3.0) + selenium-webdriver (>= 3.0, < 4.0) + webmock (3.11.1) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webpacker (5.2.1) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + webrick (1.7.0) + websocket (1.2.9) + websocket-driver (0.7.3) + websocket-extensions (>= 0.1.0) + websocket-driver (0.7.3-java) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) + zeitwerk (2.4.2) + +PLATFORMS + java + mswin64 + ruby + x64-mingw32 + x86-mingw32 + x86-mswin32 + x86_64-darwin-19 + +DEPENDENCIES + activerecord-jdbcmysql-adapter (>= 1.3.0) + activerecord-jdbcpostgresql-adapter (>= 1.3.0) + activerecord-jdbcsqlite3-adapter (>= 1.3.0) + aws-sdk-s3 + aws-sdk-sns + azure-storage-blob + backburner + bcrypt (~> 3.1.11) + benchmark-ips + blade + bootsnap (>= 1.4.4) + byebug + capybara (>= 3.26) + connection_pool + dalli + delayed_job + delayed_job_active_record + google-cloud-storage (~> 1.11) + hiredis + image_processing (~> 1.2) + json (>= 2.0.0) + kindlerb (~> 1.2.0) + libxml-ruby + listen (~> 3.3) + minitest-bisect + minitest-reporters + minitest-retry + mysql2 (~> 0.5)! + nokogiri (>= 1.8.1, != 1.11.0) + pg (~> 1.1) + psych (~> 3.0) + puma + que + queue_classic! + qunit-selenium + racc (>= 1.4.6) + rack-cache (~> 1.2) + rails! + rake (>= 11.1) + redcarpet (~> 3.2.3) + redis (~> 4.0) + redis-namespace + resque + resque-scheduler + rexml + rouge + rubocop (>= 0.90) + rubocop-packaging + rubocop-performance + rubocop-rails + sass-rails + sdoc (>= 2.0.4) + selenium-webdriver (>= 4.0.0.alpha7) + sequel + sidekiq + sneakers + sprockets-export + sqlite3 (~> 1.4) + stackprof + sucker_punch + turbolinks (~> 5) + tzinfo-data + uglifier (>= 1.3.0) + w3c_validators (~> 1.3.6) + wdm (>= 0.1.0) + webdrivers + webmock + webpacker (~> 5.0) + webrick + websocket-client-simple! + +BUNDLED WITH + 2.2.3 diff --git a/tests/packagedcode/data/rubygems/gemfile-lock/complex/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile-lock/complex/origin.ABOUT new file mode 100644 index 00000000000..d3a185e8801 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile-lock/complex/origin.ABOUT @@ -0,0 +1,2 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/linguist/32ec19c013a7f81ffaeead25e6e8f9668c7ed574/samples/Gemfile.lock/filenames/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/1/Gemfile b/tests/packagedcode/data/rubygems/gemfile/1/Gemfile new file mode 100644 index 00000000000..91880bb58c4 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/1/Gemfile @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +ruby '2.6.3' + + +gem 'active_model_serializers' +gem 'bootsnap', '>= 1.4.2', require: false +gem 'jbuilder', '~> 2.7' +gem 'pg', '>= 0.18', '< 2.0' +gem 'puma', '~> 4.1' +gem 'rack-cors' +gem 'rails', '~> 6.0.4', '>= 6.0.4.7' + +group :development, :test do + gem 'byebug', platforms: %i[mri mingw x64_mingw] + gem 'rspec-rails', '~> 5.0.0' +end + +group :development do + gem 'factory_bot_rails' + gem 'faker' + gem 'listen', '~> 3.2' + gem 'spring' + gem 'spring-watcher-listen', '~> 2.0.0' +end + +gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] diff --git a/tests/packagedcode/data/rubygems/gemfile/1/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/1/Gemfile.lock new file mode 100644 index 00000000000..e3ae155e53d --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/1/Gemfile.lock @@ -0,0 +1,207 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (6.0.4.7) + actionpack (= 6.0.4.7) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (6.0.4.7) + actionpack (= 6.0.4.7) + activejob (= 6.0.4.7) + activerecord (= 6.0.4.7) + activestorage (= 6.0.4.7) + activesupport (= 6.0.4.7) + mail (>= 2.7.1) + actionmailer (6.0.4.7) + actionpack (= 6.0.4.7) + actionview (= 6.0.4.7) + activejob (= 6.0.4.7) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (6.0.4.7) + actionview (= 6.0.4.7) + activesupport (= 6.0.4.7) + rack (~> 2.0, >= 2.0.8) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.0.4.7) + actionpack (= 6.0.4.7) + activerecord (= 6.0.4.7) + activestorage (= 6.0.4.7) + activesupport (= 6.0.4.7) + nokogiri (>= 1.8.5) + actionview (6.0.4.7) + activesupport (= 6.0.4.7) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + active_model_serializers (0.10.10) + actionpack (>= 4.1, < 6.1) + activemodel (>= 4.1, < 6.1) + case_transform (>= 0.2) + jsonapi-renderer (>= 0.1.1.beta1, < 0.3) + activejob (6.0.4.7) + activesupport (= 6.0.4.7) + globalid (>= 0.3.6) + activemodel (6.0.4.7) + activesupport (= 6.0.4.7) + activerecord (6.0.4.7) + activemodel (= 6.0.4.7) + activesupport (= 6.0.4.7) + activestorage (6.0.4.7) + actionpack (= 6.0.4.7) + activejob (= 6.0.4.7) + activerecord (= 6.0.4.7) + marcel (~> 1.0.0) + activesupport (6.0.4.7) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + bootsnap (1.11.1) + msgpack (~> 1.2) + builder (3.2.4) + byebug (11.1.3) + case_transform (0.2) + activesupport + concurrent-ruby (1.1.9) + crass (1.0.6) + diff-lcs (1.5.0) + erubi (1.10.0) + factory_bot (6.1.0) + activesupport (>= 5.0.0) + factory_bot_rails (6.1.0) + factory_bot (~> 6.1.0) + railties (>= 5.0.0) + faker (2.17.0) + i18n (>= 1.6, < 2) + ffi (1.15.5) + globalid (1.0.0) + activesupport (>= 5.0) + i18n (1.10.0) + concurrent-ruby (~> 1.0) + jbuilder (2.11.2) + activesupport (>= 5.0.0) + jsonapi-renderer (0.2.2) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.15.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (1.0.2) + method_source (1.0.0) + mini_mime (1.1.2) + mini_portile2 (2.8.0) + minitest (5.15.0) + msgpack (1.4.5) + nio4r (2.5.8) + nokogiri (1.13.3) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) + pg (1.3.4) + puma (4.3.11) + nio4r (~> 2.0) + racc (1.6.0) + rack (2.2.3) + rack-cors (1.1.1) + rack (>= 2.0.0) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (6.0.4.7) + actioncable (= 6.0.4.7) + actionmailbox (= 6.0.4.7) + actionmailer (= 6.0.4.7) + actionpack (= 6.0.4.7) + actiontext (= 6.0.4.7) + actionview (= 6.0.4.7) + activejob (= 6.0.4.7) + activemodel (= 6.0.4.7) + activerecord (= 6.0.4.7) + activestorage (= 6.0.4.7) + activesupport (= 6.0.4.7) + bundler (>= 1.3.0) + railties (= 6.0.4.7) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.2) + loofah (~> 2.3) + railties (6.0.4.7) + actionpack (= 6.0.4.7) + activesupport (= 6.0.4.7) + method_source + rake (>= 0.8.7) + thor (>= 0.20.3, < 2.0) + rake (13.0.6) + rb-fsevent (0.11.1) + rb-inotify (0.10.1) + ffi (~> 1.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-mocks (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-rails (5.0.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) + rspec-support (3.11.0) + spring (2.1.1) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (4.0.3) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + thor (1.2.1) + thread_safe (0.3.6) + tzinfo (1.2.9) + thread_safe (~> 0.1) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + zeitwerk (2.5.4) + +PLATFORMS + ruby + +DEPENDENCIES + active_model_serializers + bootsnap (>= 1.4.2) + byebug + factory_bot_rails + faker + jbuilder (~> 2.7) + listen (~> 3.2) + pg (>= 0.18, < 2.0) + puma (~> 4.1) + rack-cors + rails (~> 6.0.4, >= 6.0.4.7) + rspec-rails (~> 5.0.0) + spring + spring-watcher-listen (~> 2.0.0) + tzinfo-data + +RUBY VERSION + ruby 2.6.3p62 + +BUNDLED WITH + 2.1.4 diff --git a/tests/packagedcode/data/rubygems/gemfile/1/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/1/origin.ABOUT new file mode 100644 index 00000000000..c52c9b1359d --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/1/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/byrneg7/MWL_api/master/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/byrneg7/MWL_api/master/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/10/Gemfile b/tests/packagedcode/data/rubygems/gemfile/10/Gemfile new file mode 100644 index 00000000000..4d7a8c3e750 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/10/Gemfile @@ -0,0 +1,58 @@ +source 'https://rubygems.org' + +git_source(:github) do |repo_name| + repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") + "https://github.com/#{repo_name}.git" +end + +gem 'nokogiri', '~> 1.12', '< 1.13' ### TEMPORARY PIN 1.13 requires ruby > 2.5 + +gem 'rails', '~> 5.2' +gem 'dotenv-deployment' +gem 'dotenv-rails' + +# Required gems for QA and linked data access +gem 'qa_server', '~> 7.9' +gem 'qa', '~> 5.5' +gem 'linkeddata' + +# Other gems +gem 'coffee-rails', '~> 4.2' +gem 'concurrent-ruby' +gem 'jbuilder', '~> 2.5' +gem 'lograge' +gem 'mysql2' +gem 'puma', '~> 4.3' +gem 'sass-rails', '~> 5.0' +gem 'turbolinks', '~> 5' +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] # Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'uglifier', '>= 1.3.0' + +group :development, :test do + gem 'byebug' + gem 'coveralls', require: false + gem 'database_cleaner' + gem 'factory_bot_rails', '~> 4.4', require: false + gem 'faker' + gem 'listen' + gem 'rails-controller-testing' +end + +group :development do + gem 'better_errors' # add command line in browser when errors + gem 'binding_of_caller' # deeper stack trace used by better errors + gem 'bixby', '~> 1.0.0' # style guide enforcement with rubocop + gem 'rubocop' + gem 'rubocop-checkstyle_formatter', require: false + gem 'spring' # Spring speeds up development by keeping your application running in the background. + gem 'web-console', '~> 3.0' # access to IRB console on exception pages + gem 'xray-rails' +end + +group :test do + gem 'rspec-rails' + gem 'rspec-activemodel-mocks' + gem 'sqlite3' +end + +gem 'swagger-docs' diff --git a/tests/packagedcode/data/rubygems/gemfile/10/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/10/Gemfile.lock new file mode 100644 index 00000000000..36f34f1de01 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/10/Gemfile.lock @@ -0,0 +1,524 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (5.2.6) + actionpack (= 5.2.6) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailer (5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.2.6) + actionview (= 5.2.6) + activesupport (= 5.2.6) + rack (~> 2.0, >= 2.0.8) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.2.6) + activesupport (= 5.2.6) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activejob (5.2.6) + activesupport (= 5.2.6) + globalid (>= 0.3.6) + activemodel (5.2.6) + activesupport (= 5.2.6) + activerecord (5.2.6) + activemodel (= 5.2.6) + activesupport (= 5.2.6) + arel (>= 9.0) + activerecord-import (1.3.0) + activerecord (>= 4.2) + activestorage (5.2.6) + actionpack (= 5.2.6) + activerecord (= 5.2.6) + marcel (~> 1.0.0) + activesupport (5.2.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + amazing_print (1.4.0) + arel (9.0.0) + ast (2.4.2) + bcp47 (0.3.3) + i18n + better_errors (2.9.1) + coderay (>= 1.0.0) + erubi (>= 1.0.0) + rack (>= 0.9.0) + bindex (0.8.1) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + bixby (1.0.0) + rubocop (~> 0.50, <= 0.52.1) + rubocop-rspec (~> 1.22, <= 1.22.2) + builder (3.2.4) + byebug (11.1.3) + coderay (1.1.3) + coffee-rails (4.2.2) + coffee-script (>= 2.2.0) + railties (>= 4.0.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.1.9) + connection_pool (2.2.5) + coveralls (0.8.23) + json (>= 1.8, < 3) + simplecov (~> 0.16.1) + term-ansicolor (~> 1.3) + thor (>= 0.19.4, < 2.0) + tins (~> 1.6) + crass (1.0.6) + database_cleaner (2.0.1) + database_cleaner-active_record (~> 2.0.0) + database_cleaner-active_record (2.0.1) + activerecord (>= 5.a) + database_cleaner-core (~> 2.0.0) + database_cleaner-core (2.0.1) + debug_inspector (1.1.0) + deprecation (1.1.0) + activesupport + diff-lcs (1.5.0) + docile (1.4.0) + dotenv (1.0.2) + dotenv-deployment (0.3.0) + dotenv (~> 1.0) + dotenv-rails (1.0.2) + dotenv (= 1.0.2) + ebnf (2.2.1) + amazing_print (~> 1.2) + htmlentities (~> 4.3) + rdf (~> 3.1) + scanf (~> 1.0) + sxp (~> 1.1) + unicode-types (~> 1.6) + equivalent-xml (0.6.0) + nokogiri (>= 1.4.3) + erubi (1.10.0) + execjs (2.8.1) + factory_bot (4.11.1) + activesupport (>= 3.0.0) + factory_bot_rails (4.11.1) + factory_bot (~> 4.11.1) + railties (>= 3.0.0) + faker (2.19.0) + i18n (>= 1.6, < 2) + faraday (1.9.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.3) + multipart-post (>= 1.2, < 3) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + ffi (1.15.5) + geocoder (1.7.3) + globalid (1.0.0) + activesupport (>= 5.0) + gruff (0.14.0) + histogram + rmagick + haml (5.2.2) + temple (>= 0.8.0) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + histogram (0.2.4.1) + htmlentities (4.3.4) + i18n (1.9.1) + concurrent-ruby (~> 1.0) + jbuilder (2.11.5) + actionview (>= 5.0.0) + activesupport (>= 5.0.0) + json (2.6.1) + json-canonicalization (0.2.1) + json-ld (3.1.10) + htmlentities (~> 4.3) + json-canonicalization (~> 0.2) + link_header (~> 0.0, >= 0.0.8) + multi_json (~> 1.14) + rack (~> 2.0) + rdf (~> 3.1) + json-ld-preloaded (3.1.6) + json-ld (~> 3.1) + rdf (~> 3.1) + ld-patch (3.1.3) + ebnf (~> 2.1) + rdf (~> 3.1) + rdf-xsd (~> 3.1) + sparql (~> 3.1) + sxp (~> 1.1) + ldpath (1.1.0) + nokogiri (~> 1.8) + parslet + rdf (~> 3.0) + link_header (0.0.8) + linkeddata (3.1.6) + equivalent-xml (~> 0.6) + json-ld (~> 3.1, >= 3.1.10) + json-ld-preloaded (~> 3.1, >= 3.1.6) + ld-patch (~> 3.1, >= 3.1.3) + nokogiri (~> 1.12) + rdf (~> 3.1, >= 3.1.15) + rdf-aggregate-repo (~> 3.1) + rdf-isomorphic (~> 3.1, >= 3.1.1) + rdf-json (~> 3.1) + rdf-microdata (~> 3.1, >= 3.1.4) + rdf-n3 (~> 3.1, >= 3.1.2) + rdf-normalize (~> 0.4) + rdf-ordered-repo (~> 3.1, >= 3.1.1) + rdf-rdfa (~> 3.1, >= 3.1.3) + rdf-rdfxml (~> 3.1, >= 3.1.1) + rdf-reasoner (~> 0.7, >= 0.7.2) + rdf-tabular (~> 3.1, >= 3.1.1) + rdf-trig (~> 3.1, >= 3.1.2) + rdf-trix (~> 3.1, >= 3.1.1) + rdf-turtle (~> 3.1, >= 3.1.3) + rdf-vocab (~> 3.1, >= 3.1.14) + rdf-xsd (~> 3.1, >= 3.1.1) + shacl (~> 0.1, >= 0.1.1) + shex (~> 0.6, >= 0.6.4) + sparql (~> 3.1, >= 3.1.8) + sparql-client (~> 3.1, >= 3.1.2) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.5.0) + lograge (0.11.2) + actionpack (>= 4) + activesupport (>= 4) + railties (>= 4) + request_store (~> 1.0) + loofah (2.13.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (1.0.2) + method_source (1.0.0) + mini_mime (1.1.2) + minitest (5.15.0) + multi_json (1.15.0) + multipart-post (2.1.1) + mysql2 (0.5.3) + net-http-persistent (4.0.1) + connection_pool (~> 2.2) + nio4r (2.5.8) + nokogiri (1.12.5-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.12.5-x86_64-linux) + racc (~> 1.4) + parallel (1.21.0) + parser (2.7.2.0) + ast (~> 2.4.1) + parslet (2.0.0) + powerpack (0.1.3) + public_suffix (4.0.6) + puma (4.3.12) + nio4r (~> 2.0) + qa (5.8.0) + activerecord-import + deprecation + faraday (< 2.0) + geocoder + ldpath + nokogiri (~> 1.6) + rails (>= 5.0, < 6.2) + rdf + qa_server (7.9.2) + gruff + rails (~> 5.2, >= 5.2.5) + sass-rails (~> 5.0) + useragent + racc (1.6.0) + rack (2.2.3) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (5.2.6) + actioncable (= 5.2.6) + actionmailer (= 5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) + activemodel (= 5.2.6) + activerecord (= 5.2.6) + activestorage (= 5.2.6) + activesupport (= 5.2.6) + bundler (>= 1.3.0) + railties (= 5.2.6) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.2) + loofah (~> 2.3) + railties (5.2.6) + actionpack (= 5.2.6) + activesupport (= 5.2.6) + method_source + rake (>= 0.8.7) + thor (>= 0.19.0, < 2.0) + rainbow (3.1.1) + rake (13.0.6) + rb-fsevent (0.11.0) + rb-inotify (0.10.1) + ffi (~> 1.0) + rdf (3.1.15) + hamster (~> 3.0) + link_header (~> 0.0, >= 0.0.8) + rdf-aggregate-repo (3.1.0) + rdf (~> 3.1) + rdf-isomorphic (3.1.1) + rdf (~> 3.1) + rdf-json (3.1.0) + rdf (~> 3.1) + rdf-microdata (3.1.4) + htmlentities (~> 4.3) + nokogiri (~> 1.12) + rdf (~> 3.1, >= 3.1.13) + rdf-rdfa (~> 3.1, >= 3.1.3) + rdf-xsd (~> 3.1) + rdf-n3 (3.1.2) + ebnf (~> 2.1) + rdf (~> 3.1, >= 3.1.8) + sparql (~> 3.1, >= 3.1.4) + sxp (~> 1.1) + rdf-normalize (0.4.0) + rdf (~> 3.1) + rdf-ordered-repo (3.1.1) + rdf (~> 3.1) + rdf-rdfa (3.1.3) + haml (~> 5.2) + htmlentities (~> 4.3) + rdf (~> 3.1, >= 3.1.13) + rdf-aggregate-repo (~> 3.1) + rdf-vocab (~> 3.1, >= 3.1.11) + rdf-xsd (~> 3.1) + rdf-rdfxml (3.1.1) + htmlentities (~> 4.3) + rdf (~> 3.1) + rdf-rdfa (~> 3.1) + rdf-xsd (~> 3.1) + rdf-reasoner (0.7.2) + rdf (~> 3.1, >= 3.1.12) + rdf-xsd (~> 3.1) + rdf-tabular (3.1.1) + addressable (~> 2.3) + bcp47 (~> 0.3, >= 0.3.3) + json-ld (~> 3.1) + rdf (~> 3.1) + rdf-vocab (~> 3.1) + rdf-xsd (~> 3.1) + rdf-trig (3.1.2) + ebnf (~> 2.1) + rdf (~> 3.1) + rdf-turtle (~> 3.1) + rdf-trix (3.1.1) + rdf (~> 3.1) + rdf-xsd (~> 3.1) + rdf-turtle (3.1.3) + ebnf (~> 2.1) + rdf (~> 3.1, >= 3.1.8) + rdf-vocab (3.1.14) + rdf (~> 3.1, >= 3.1.12) + rdf-xsd (3.1.1) + rdf (~> 3.1) + rexml (~> 3.2) + request_store (1.5.1) + rack (>= 1.4) + rexml (3.2.5) + rmagick (4.2.4) + rspec-activemodel-mocks (1.1.0) + activemodel (>= 3.0) + activesupport (>= 3.0) + rspec-mocks (>= 2.99, < 4.0) + rspec-core (3.10.2) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.3) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-rails (5.1.0) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) + rspec-support (3.10.3) + rubocop (0.52.1) + parallel (~> 1.10) + parser (>= 2.4.0.2, < 3.0) + powerpack (~> 0.1) + rainbow (>= 2.2.2, < 4.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + rubocop-checkstyle_formatter (0.4.0) + rubocop (>= 0.35.1) + rubocop-rspec (1.22.2) + rubocop (>= 0.52.1) + ruby-progressbar (1.11.0) + ruby2_keywords (0.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sass-rails (5.1.0) + railties (>= 5.2.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + scanf (1.0.0) + shacl (0.1.1) + json-ld (~> 3.1, >= 3.1.7) + rdf (~> 3.1, >= 3.1.8) + sparql (~> 3.1) + sxp (~> 1.1) + shex (0.6.4) + ebnf (~> 2.1, >= 2.2) + htmlentities (~> 4.3) + json-ld (~> 3.1) + json-ld-preloaded (~> 3.1) + rdf (~> 3.1) + rdf-xsd (~> 3.1) + sparql (~> 3.1) + sxp (~> 1.1) + simplecov (0.16.1) + docile (~> 1.1) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.2) + sparql (3.1.8) + builder (~> 3.2) + ebnf (~> 2.1) + logger (~> 1.4) + rdf (~> 3.1, >= 3.1.14) + rdf-aggregate-repo (~> 3.1) + rdf-xsd (~> 3.1) + sparql-client (~> 3.1, >= 3.1.2) + sxp (~> 1.1) + sparql-client (3.1.2) + net-http-persistent (~> 4.0, >= 4.0.1) + rdf (~> 3.1) + spring (3.1.1) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + sqlite3 (1.4.2) + swagger-docs (0.2.9) + activesupport (>= 3) + rails (>= 3) + sxp (1.1.0) + rdf (~> 3.1) + sync (0.5.0) + temple (0.8.2) + term-ansicolor (1.7.1) + tins (~> 1.0) + thor (1.2.1) + thread_safe (0.3.6) + tilt (2.0.10) + tins (1.31.0) + sync + turbolinks (5.2.1) + turbolinks-source (~> 5.2) + turbolinks-source (5.2.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unicode-display_width (1.8.0) + unicode-types (1.7.0) + useragent (0.16.10) + web-console (3.7.0) + actionview (>= 5.0) + activemodel (>= 5.0) + bindex (>= 0.4.0) + railties (>= 5.0) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xray-rails (0.3.2) + rails (>= 3.1.0) + +PLATFORMS + x86_64-darwin-18 + +DEPENDENCIES + better_errors + binding_of_caller + bixby (~> 1.0.0) + byebug + coffee-rails (~> 4.2) + concurrent-ruby + coveralls + database_cleaner + dotenv-deployment + dotenv-rails + factory_bot_rails (~> 4.4) + faker + jbuilder (~> 2.5) + linkeddata + listen + lograge + mysql2 + nokogiri (~> 1.12, < 1.13) + puma (~> 4.3) + qa (~> 5.5) + qa_server (~> 7.9) + rails (~> 5.2) + rails-controller-testing + rspec-activemodel-mocks + rspec-rails + rubocop + rubocop-checkstyle_formatter + sass-rails (~> 5.0) + spring + sqlite3 + swagger-docs + turbolinks (~> 5) + tzinfo-data + uglifier (>= 1.3.0) + web-console (~> 3.0) + xray-rails + +BUNDLED WITH + 2.2.30 diff --git a/tests/packagedcode/data/rubygems/gemfile/10/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/10/origin.ABOUT new file mode 100644 index 00000000000..5624d541c1b --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/10/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/cul-it/qa_server/9d07f2eacfdf7ffa91a89b9703289d11d952f3ea/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/cul-it/qa_server/9d07f2eacfdf7ffa91a89b9703289d11d952f3ea/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/11/Gemfile b/tests/packagedcode/data/rubygems/gemfile/11/Gemfile new file mode 100644 index 00000000000..6a7624b5616 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/11/Gemfile @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +ruby '3.0.3' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main' +gem 'rails', '~> 6.1.5' +# Use postgresql as the database for Active Record +gem 'pg' +# Use Puma as the app server +gem 'puma', '~> 5.0' +# Use SCSS for stylesheets +gem 'sass-rails', '>= 6' +# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker +gem 'webpacker', '~> 5.0' +# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks +gem 'turbolinks', '~> 5' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.7' +# Use Redis adapter to run Action Cable in production +# gem 'redis', '~> 4.0' +# Use Active Model has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Active Storage variant +# gem 'image_processing', '~> 1.2' + +# Reduces boot times through caching; required in config/boot.rb +gem 'bootsnap', '>= 1.4.4', require: false + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug', platforms: %i[mri mingw x64_mingw] +end + +group :development do + # Access an interactive console on exception pages or by calling 'console' anywhere in the code. + gem 'web-console', '>= 4.1.0' + # Display performance information such as SQL time and flame graphs for each request in your browser. + # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md + gem 'listen', '~> 3.3' + gem 'rack-mini-profiler', '~> 2.0' + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'autoprefixer-rails', '10.2.5' +gem 'font-awesome-sass', '~> 5.15' +gem 'rails-controller-testing', group: [:test] +gem 'rspec-rails', group: [:test] +gem 'simple_form', github: 'heartcombo/simple_form' +gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] diff --git a/tests/packagedcode/data/rubygems/gemfile/11/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/11/Gemfile.lock new file mode 100644 index 00000000000..9cf2bcd5456 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/11/Gemfile.lock @@ -0,0 +1,240 @@ +GIT + remote: https://github.com/heartcombo/simple_form.git + revision: 159f4015973c5f57b05253308bbaedc238dbbe07 + specs: + simple_form (5.1.0) + actionpack (>= 5.2) + activemodel (>= 5.2) + +GEM + remote: https://rubygems.org/ + specs: + actioncable (6.1.5) + actionpack (= 6.1.5) + activesupport (= 6.1.5) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (6.1.5) + actionpack (= 6.1.5) + activejob (= 6.1.5) + activerecord (= 6.1.5) + activestorage (= 6.1.5) + activesupport (= 6.1.5) + mail (>= 2.7.1) + actionmailer (6.1.5) + actionpack (= 6.1.5) + actionview (= 6.1.5) + activejob (= 6.1.5) + activesupport (= 6.1.5) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (6.1.5) + actionview (= 6.1.5) + activesupport (= 6.1.5) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.1.5) + actionpack (= 6.1.5) + activerecord (= 6.1.5) + activestorage (= 6.1.5) + activesupport (= 6.1.5) + nokogiri (>= 1.8.5) + actionview (6.1.5) + activesupport (= 6.1.5) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (6.1.5) + activesupport (= 6.1.5) + globalid (>= 0.3.6) + activemodel (6.1.5) + activesupport (= 6.1.5) + activerecord (6.1.5) + activemodel (= 6.1.5) + activesupport (= 6.1.5) + activestorage (6.1.5) + actionpack (= 6.1.5) + activejob (= 6.1.5) + activerecord (= 6.1.5) + activesupport (= 6.1.5) + marcel (~> 1.0) + mini_mime (>= 1.1.0) + activesupport (6.1.5) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + autoprefixer-rails (10.2.5.0) + execjs (< 2.8.0) + bindex (0.8.1) + bootsnap (1.11.1) + msgpack (~> 1.2) + builder (3.2.4) + byebug (11.1.3) + concurrent-ruby (1.1.10) + crass (1.0.6) + diff-lcs (1.5.0) + erubi (1.10.0) + execjs (2.7.0) + ffi (1.15.5) + font-awesome-sass (5.15.1) + sassc (>= 1.11) + globalid (1.0.0) + activesupport (>= 5.0) + i18n (1.10.0) + concurrent-ruby (~> 1.0) + jbuilder (2.11.5) + actionview (>= 5.0.0) + activesupport (>= 5.0.0) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.15.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (1.0.2) + method_source (1.0.0) + mini_mime (1.1.2) + minitest (5.15.0) + msgpack (1.4.5) + nio4r (2.5.8) + nokogiri (1.13.3-arm64-darwin) + racc (~> 1.4) + pg (1.2.3) + puma (5.6.2) + nio4r (~> 2.0) + racc (1.6.0) + rack (2.2.3) + rack-mini-profiler (2.3.4) + rack (>= 1.2.0) + rack-proxy (0.7.2) + rack + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (6.1.5) + actioncable (= 6.1.5) + actionmailbox (= 6.1.5) + actionmailer (= 6.1.5) + actionpack (= 6.1.5) + actiontext (= 6.1.5) + actionview (= 6.1.5) + activejob (= 6.1.5) + activemodel (= 6.1.5) + activerecord (= 6.1.5) + activestorage (= 6.1.5) + activesupport (= 6.1.5) + bundler (>= 1.15.0) + railties (= 6.1.5) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.2) + loofah (~> 2.3) + railties (6.1.5) + actionpack (= 6.1.5) + activesupport (= 6.1.5) + method_source + rake (>= 12.2) + thor (~> 1.0) + rake (13.0.6) + rb-fsevent (0.11.1) + rb-inotify (0.10.1) + ffi (~> 1.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-mocks (3.11.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-rails (5.1.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) + rspec-support (3.11.0) + sass-rails (6.0.0) + sassc-rails (~> 2.1, >= 2.1.1) + sassc (2.4.0) + ffi (~> 1.9) + sassc-rails (2.1.2) + railties (>= 4.0.0) + sassc (>= 2.0) + sprockets (> 3.0) + sprockets-rails + tilt + semantic_range (3.0.0) + spring (4.0.0) + sprockets (4.0.3) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + thor (1.2.1) + tilt (2.0.10) + turbolinks (5.2.1) + turbolinks-source (~> 5.2) + turbolinks-source (5.2.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + web-console (4.2.0) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) + bindex (>= 0.4.0) + railties (>= 6.0.0) + webpacker (5.4.3) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + zeitwerk (2.5.4) + +PLATFORMS + arm64-darwin-21 + +DEPENDENCIES + autoprefixer-rails (= 10.2.5) + bootsnap (>= 1.4.4) + byebug + font-awesome-sass (~> 5.15) + jbuilder (~> 2.7) + listen (~> 3.3) + pg + puma (~> 5.0) + rack-mini-profiler (~> 2.0) + rails (~> 6.1.5) + rails-controller-testing + rspec-rails + sass-rails (>= 6) + simple_form! + spring + turbolinks (~> 5) + tzinfo-data + web-console (>= 4.1.0) + webpacker (~> 5.0) + +RUBY VERSION + ruby 3.0.3p157 + +BUNDLED WITH + 2.3.7 diff --git a/tests/packagedcode/data/rubygems/gemfile/11/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/11/origin.ABOUT new file mode 100644 index 00000000000..3d6eb63c12e --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/11/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/gitjpaul/rails-watch-list/49527bacaaf17e617076e0e56d96b89b0169eddf/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/gitjpaul/rails-watch-list/49527bacaaf17e617076e0e56d96b89b0169eddf/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/12/Gemfile b/tests/packagedcode/data/rubygems/gemfile/12/Gemfile new file mode 100644 index 00000000000..53a86101c08 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/12/Gemfile @@ -0,0 +1,123 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +git_source(:github) do |repo_name| + repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") + "https://github.com/#{repo_name}.git" +end + +ruby ">= 2.7.2", "< 3.1" + +git_source :github do |name| + "https://github.com/#{name}.git" +end + +gem 'mime-types', '~> 3.3', require: 'mime/types/columnar' + +# Gems required in all environments +if ENV["RAILS_MASTER"] == '1' + gem 'rails', git: 'https://github.com/rails/rails.git' +else + gem 'rails', '6.1.4.1' +end + +gem 'bluecloth' +gem 'dalli' +gem 'devise', github: "heartcombo/devise" +gem 'git_hub_bub' +gem 'jquery-rails' +gem 'local_time', '2.1.0' +gem 'maildown', '~> 3.3' +gem 'omniauth', '~> 2.0.4' +gem 'omniauth-rails_csrf_protection' +gem 'omniauth-github' +gem 'pg' +gem 'puma' +gem 'rack-timeout' +gem 'rrrretry' +gem 'valid_email' +gem 'warden', '1.2.9' +gem 'wicked' +gem 'will_paginate', '3.3.1' +# gem 'sass-rails', '6.0.0.beta1' +gem 'sassc' +gem 'sassc-rails' + +gem 'autoprefixer-rails', '~> 10.2.4' +gem 'bourbon' +gem 'coffee-rails', '~> 5.0.0' +gem 'neat', '~> 1.7' +gem 'normalize-rails' +gem 'slim-rails' +gem 'uglifier', '>= 1.0.3' +gem 'render_async', '~> 2.1' + +group :development do + gem 'bullet', require: false, github: 'flyerhzm/bullet' + gem 'foreman' + gem 'listen' + gem 'web-console' + gem 'memory_profiler' +end + +group :test do + gem 'capybara', '3.35.3' + # Not essential but helpful for save_and_open_page + gem 'launchy' + gem 'mocha', require: false + gem 'rails-controller-testing' + gem 'simplecov', require: false + gem 'vcr' + gem 'webmock' + gem 'test-prof' +end + +group :development, :test do + gem 'derailed_benchmarks' + gem 'dotenv-rails', '2.7.6' + gem 'faker', require: false + gem 'pry' + gem 'rubocop', require: false + gem 'rubocop-performance' +end + +gem 'rack-mini-profiler' + +gem 'the_lone_dyno' + +gem 'sidekiq' +gem 'sinatra', '~> 2.1.0' + +gem 'aws-sdk-s3', '~> 1.103.0' + +gem 'mail', require: ['mail', 'mail/utilities', 'mail/parsers'] # parsers is used by `valid_email` and may be causing https://github.com/mikel/mail/issues/912#issuecomment-170121429 + +gem 'sprockets', github: "rails/sprockets" +gem 'sprockets-rails' + +gem 'babel-transpiler' + +gem 'scout_apm', '~> 4.1.2' +gem 'yard', '~> 0.9.26' + +gem 'oj' +gem 'rack-canonical-host' +gem 'sentry-raven' + +gem 'bootsnap', require: false +gem 'rbtrace' +gem 'redis-namespace' +gem 'stackprof' +gem 'flamegraph' +gem 'prawn' +gem 'skylight', '~> 5.1.1' + +gem 'minitest', '5.14.4' +gem 'sitemap_generator' +gem 'premailer-rails' + +# gem 'barnes' +gem 'puma_worker_killer' +gem 'rake' +gem 'rails_autoscale_agent', github: 'adamlogic/rails_autoscale_agent', branch: 'puma' diff --git a/tests/packagedcode/data/rubygems/gemfile/12/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/12/Gemfile.lock new file mode 100644 index 00000000000..06dce092e95 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/12/Gemfile.lock @@ -0,0 +1,549 @@ +GIT + remote: https://github.com/adamlogic/rails_autoscale_agent.git + revision: f1e2db8020c8c2e371c25df1602155b07dcef6f5 + branch: puma + specs: + rails_autoscale_agent (0.9.0) + +GIT + remote: https://github.com/flyerhzm/bullet.git + revision: 371beece05a89c0acd6162a4406e6262a55a8d85 + specs: + bullet (6.1.5) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) + +GIT + remote: https://github.com/heartcombo/devise.git + revision: c82e4cf47b02002b2fd7ca31d441cf1043fc634c + specs: + devise (4.8.0) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 4.1.0) + responders + warden (~> 1.2.3) + +GIT + remote: https://github.com/rails/sprockets.git + revision: 24c97270fbf6de11b4ffff0311bb427b7a8a3a83 + specs: + sprockets (4.0.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + +GEM + remote: https://rubygems.org/ + specs: + actioncable (6.1.4.1) + actionpack (= 6.1.4.1) + activesupport (= 6.1.4.1) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (6.1.4.1) + actionpack (= 6.1.4.1) + activejob (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) + mail (>= 2.7.1) + actionmailer (6.1.4.1) + actionpack (= 6.1.4.1) + actionview (= 6.1.4.1) + activejob (= 6.1.4.1) + activesupport (= 6.1.4.1) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (6.1.4.1) + actionview (= 6.1.4.1) + activesupport (= 6.1.4.1) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.1.4.1) + actionpack (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) + nokogiri (>= 1.8.5) + actionview (6.1.4.1) + activesupport (= 6.1.4.1) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (6.1.4.1) + activesupport (= 6.1.4.1) + globalid (>= 0.3.6) + activemodel (6.1.4.1) + activesupport (= 6.1.4.1) + activerecord (6.1.4.1) + activemodel (= 6.1.4.1) + activesupport (= 6.1.4.1) + activestorage (6.1.4.1) + actionpack (= 6.1.4.1) + activejob (= 6.1.4.1) + activerecord (= 6.1.4.1) + activesupport (= 6.1.4.1) + marcel (~> 1.0.0) + mini_mime (>= 1.1.0) + activesupport (6.1.4.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + ast (2.4.2) + autoprefixer-rails (10.2.4.0) + execjs + aws-eventstream (1.2.0) + aws-partitions (1.503.0) + aws-sdk-core (3.121.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.48.0) + aws-sdk-core (~> 3, >= 3.120.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.103.0) + aws-sdk-core (~> 3, >= 3.120.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.4.0) + aws-eventstream (~> 1, >= 1.0.2) + babel-source (5.8.35) + babel-transpiler (0.7.0) + babel-source (>= 4.0, < 6) + execjs (~> 2.0) + bcrypt (3.1.16) + benchmark-ips (2.9.1) + bindex (0.8.1) + bluecloth (2.2.0) + bootsnap (1.9.1) + msgpack (~> 1.0) + bourbon (7.0.0) + thor (~> 1.0) + builder (3.2.4) + capybara (3.35.3) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + coderay (1.1.3) + coffee-rails (5.0.0) + coffee-script (>= 2.2.0) + railties (>= 5.2.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.1.9) + connection_pool (2.2.3) + crack (0.4.5) + rexml + crass (1.0.6) + css_parser (1.7.1) + addressable + dalli (2.7.11) + dead_end (1.1.7) + derailed_benchmarks (2.1.1) + benchmark-ips (~> 2) + dead_end + get_process_mem (~> 0) + heapy (~> 0) + memory_profiler (>= 0, < 2) + mini_histogram (>= 0.3.0) + rack (>= 1) + rack-test + rake (> 10, < 14) + ruby-statistics (>= 2.1) + thor (>= 0.19, < 2) + docile (1.3.5) + dotenv (2.7.6) + dotenv-rails (2.7.6) + dotenv (= 2.7.6) + railties (>= 3.2) + erubi (1.10.0) + excon (0.71.0) + execjs (2.7.0) + faker (2.19.0) + i18n (>= 1.6, < 2) + faraday (0.17.4) + multipart-post (>= 1.2, < 3) + ffi (1.15.4) + flamegraph (0.9.5) + foreman (0.87.2) + get_process_mem (0.2.7) + ffi (~> 1.0) + git_hub_bub (1.0.1) + excon + rrrretry + globalid (0.5.2) + activesupport (>= 5.0) + hashdiff (1.0.1) + hashie (4.1.0) + heapy (0.2.0) + thor + hey_you (0.1.1) + htmlentities (4.3.4) + i18n (1.8.10) + concurrent-ruby (~> 1.0) + jmespath (1.4.0) + jquery-rails (4.4.0) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + jwt (2.2.2) + kramdown (2.3.1) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + launchy (2.5.0) + addressable (~> 2.7) + listen (3.7.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + local_time (2.1.0) + loofah (2.12.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + maildown (3.3.0) + actionmailer (>= 4.0.0) + kramdown-parser-gfm + marcel (1.0.1) + memory_profiler (1.0.0) + method_source (1.0.0) + mime-types (3.3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2019.1009) + mini_histogram (0.3.1) + mini_mime (1.1.1) + mini_portile2 (2.6.1) + minitest (5.14.4) + mocha (1.13.0) + msgpack (1.4.2) + multi_json (1.15.0) + multi_xml (0.6.0) + multipart-post (2.1.1) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) + neat (1.7.4) + bourbon (>= 4.0) + sass (>= 3.3) + nio4r (2.5.8) + nokogiri (1.12.4) + mini_portile2 (~> 2.6.1) + racc (~> 1.4) + normalize-rails (8.0.1) + oauth2 (1.4.4) + faraday (>= 0.8, < 2.0) + jwt (>= 1.0, < 3.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (>= 1.2, < 3) + oj (3.13.7) + omniauth (2.0.4) + hashie (>= 3.4.6) + rack (>= 1.6.2, < 3) + rack-protection + omniauth-github (2.0.0) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.7.1) + omniauth-oauth2 (1.7.1) + oauth2 (~> 1.4) + omniauth (>= 1.9, < 3) + omniauth-rails_csrf_protection (1.0.0) + actionpack (>= 4.2) + omniauth (~> 2.0) + optimist (3.0.1) + orm_adapter (0.5.0) + parallel (1.21.0) + parser (3.0.2.0) + ast (~> 2.4.1) + pdf-core (0.9.0) + pg (1.2.3) + prawn (2.4.0) + pdf-core (~> 0.9.0) + ttfunk (~> 1.7) + premailer (1.11.1) + addressable + css_parser (>= 1.6.0) + htmlentities (>= 4.0.0) + premailer-rails (1.11.1) + actionmailer (>= 3) + premailer (~> 1.7, >= 1.7.9) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (4.0.6) + puma (5.5.0) + nio4r (~> 2.0) + puma_worker_killer (0.3.1) + get_process_mem (~> 0.2) + puma (>= 2.7) + racc (1.5.2) + rack (2.2.3) + rack-canonical-host (1.0.0) + addressable (> 0, < 3) + rack (>= 1.0.0, < 3) + rack-mini-profiler (2.3.3) + rack (>= 1.2.0) + rack-protection (2.1.0) + rack + rack-test (1.1.0) + rack (>= 1.0, < 3) + rack-timeout (0.6.0) + rails (6.1.4.1) + actioncable (= 6.1.4.1) + actionmailbox (= 6.1.4.1) + actionmailer (= 6.1.4.1) + actionpack (= 6.1.4.1) + actiontext (= 6.1.4.1) + actionview (= 6.1.4.1) + activejob (= 6.1.4.1) + activemodel (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) + bundler (>= 1.15.0) + railties (= 6.1.4.1) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.2) + loofah (~> 2.3) + railties (6.1.4.1) + actionpack (= 6.1.4.1) + activesupport (= 6.1.4.1) + method_source + rake (>= 0.13) + thor (~> 1.0) + rainbow (3.0.0) + rake (13.0.6) + rb-fsevent (0.11.0) + rb-inotify (0.10.1) + ffi (~> 1.0) + rbtrace (0.4.14) + ffi (>= 1.0.6) + msgpack (>= 0.4.3) + optimist (>= 3.0.0) + redis (4.3.1) + redis-namespace (1.8.1) + redis (>= 3.0.4) + regexp_parser (2.1.1) + render_async (2.1.9) + responders (3.0.1) + actionpack (>= 5.0) + railties (>= 5.0) + rexml (3.2.5) + rrrretry (1.0.0) + rubocop (1.21.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.9.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.11.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.5) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + ruby-progressbar (1.11.0) + ruby-statistics (2.1.3) + ruby2_keywords (0.0.2) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.4.0) + ffi (~> 1.9) + sassc-rails (2.1.2) + railties (>= 4.0.0) + sassc (>= 2.0) + sprockets (> 3.0) + sprockets-rails + tilt + scout_apm (4.1.2) + parser + sentry-raven (2.13.0) + faraday (>= 0.7.6, < 1.0) + sidekiq (6.2.0) + connection_pool (>= 2.2.2) + rack (~> 2.0) + redis (>= 4.2.0) + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.2) + simpleidn (0.2.1) + unf (~> 0.1.4) + sinatra (2.1.0) + mustermann (~> 1.0) + rack (~> 2.2) + rack-protection (= 2.1.0) + tilt (~> 2.0) + sitemap_generator (6.1.2) + builder (~> 3.0) + skylight (5.1.1) + activesupport (>= 5.2.0) + slim (4.1.0) + temple (>= 0.7.6, < 0.9) + tilt (>= 2.0.6, < 2.1) + slim-rails (3.3.0) + actionpack (>= 3.1) + railties (>= 3.1) + slim (>= 3.0, < 5.0) + sprockets-rails (3.2.2) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + stackprof (0.2.17) + temple (0.8.2) + test-prof (1.0.7) + the_lone_dyno (1.0.0) + hey_you (~> 0.1.1) + thor (1.1.0) + tilt (2.0.10) + ttfunk (1.7.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode-display_width (2.1.0) + uniform_notifier (1.14.2) + valid_email (0.1.4) + activemodel + mail (>= 2.6.1) + simpleidn + vcr (6.0.0) + warden (1.2.9) + rack (>= 2.0.9) + web-console (4.1.0) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) + bindex (>= 0.4.0) + railties (>= 6.0.0) + webmock (3.14.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + wicked (1.3.4) + railties (>= 3.0.7) + will_paginate (3.3.1) + xpath (3.2.0) + nokogiri (~> 1.8) + yard (0.9.26) + zeitwerk (2.4.2) + +PLATFORMS + ruby + +DEPENDENCIES + autoprefixer-rails (~> 10.2.4) + aws-sdk-s3 (~> 1.103.0) + babel-transpiler + bluecloth + bootsnap + bourbon + bullet! + capybara (= 3.35.3) + coffee-rails (~> 5.0.0) + dalli + derailed_benchmarks + devise! + dotenv-rails (= 2.7.6) + faker + flamegraph + foreman + git_hub_bub + jquery-rails + launchy + listen + local_time (= 2.1.0) + mail + maildown (~> 3.3) + memory_profiler + mime-types (~> 3.3) + minitest (= 5.14.4) + mocha + neat (~> 1.7) + normalize-rails + oj + omniauth (~> 2.0.4) + omniauth-github + omniauth-rails_csrf_protection + pg + prawn + premailer-rails + pry + puma + puma_worker_killer + rack-canonical-host + rack-mini-profiler + rack-timeout + rails (= 6.1.4.1) + rails-controller-testing + rails_autoscale_agent! + rake + rbtrace + redis-namespace + render_async (~> 2.1) + rrrretry + rubocop + rubocop-performance + sassc + sassc-rails + scout_apm (~> 4.1.2) + sentry-raven + sidekiq + simplecov + sinatra (~> 2.1.0) + sitemap_generator + skylight (~> 5.1.1) + slim-rails + sprockets! + sprockets-rails + stackprof + test-prof + the_lone_dyno + uglifier (>= 1.0.3) + valid_email + vcr + warden (= 1.2.9) + web-console + webmock + wicked + will_paginate (= 3.3.1) + yard (~> 0.9.26) + +RUBY VERSION + ruby 3.0.2p107 + +BUNDLED WITH + 2.2.22 diff --git a/tests/packagedcode/data/rubygems/gemfile/12/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/12/origin.ABOUT new file mode 100644 index 00000000000..7b626a627c6 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/12/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/codetriage/CodeTriage/51d496085bc076b43302e1c29922271688dacfe0/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/codetriage/CodeTriage/51d496085bc076b43302e1c29922271688dacfe0/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/2/Gemfile b/tests/packagedcode/data/rubygems/gemfile/2/Gemfile new file mode 100644 index 00000000000..15441dbd39c --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/2/Gemfile @@ -0,0 +1,19 @@ +source "http://rubygems.org" + +gem "actionmailer", "~> 2.3.11" +gem "actionmailer_extensions", "0.4.4" +gem "activesupport", "~> 2.3.11" +gem "httpclient", ">= 2.1.7" +gem "jruby-openssl", "0.7.3" +gem "json_pure" +gem "ntlm-http", ">= 0.1.3" +gem "rews", ">= 0.5.1" +gem "rfc822_util" +gem "sonar_connector" +gem "sonar_exchange_pull_connector" +gem "sonar_ews_pull_connector" +gem "sonar_imap_pull_connector" +gem "sonar_push_connector" +gem "sonar_rexchange" +gem "uuidtools" + diff --git a/tests/packagedcode/data/rubygems/gemfile/2/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/2/Gemfile.lock new file mode 100644 index 00000000000..639a7e58c41 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/2/Gemfile.lock @@ -0,0 +1,96 @@ +GEM + remote: http://rubygems.org/ + specs: + actionmailer (2.3.11) + actionpack (= 2.3.11) + actionmailer_extensions (0.4.4) + actionmailer (~> 2.3.10) + actionpack (2.3.11) + activesupport (= 2.3.11) + rack (~> 1.1.0) + activesupport (2.3.11) + bouncy-castle-java (1.5.0146.1) + builder (3.0.0) + fetch_in (0.2.0) + gyoku (0.4.3) + builder (>= 2.1.2) + httpclient (2.2.0.2) + httpi (0.9.3) + ntlm-http (>= 0.1.1) + rack + jruby-openssl (0.7.3) + bouncy-castle-java + json_pure (1.5.1) + nokogiri (1.4.4.2-java) + weakling (>= 0.0.3) + nori (0.2.0) + ntlm-http (0.1.3) + rack (1.1.2) + rews (0.5.1) + fetch_in (>= 0.2.0) + ntlm-http (>= 0.1.2) + rsxml (>= 0.1.4) + savon (>= 0.8.6) + rfc822_util (0.1.2) + actionmailer (~> 2.3.10) + rsxml (0.1.4) + nokogiri (>= 1.4.4) + savon (0.9.2) + builder (>= 2.1.2) + gyoku (>= 0.4.0) + httpi (>= 0.7.8) + nokogiri (>= 1.4.0) + nori (>= 0.2.0) + sonar_connector (0.9.1) + actionmailer (~> 2.3.10) + actionmailer_extensions (>= 0.4.2) + json_pure (>= 1.2.2) + sonar_connector_filestore (>= 0.1.0) + uuidtools (>= 2.1.1) + sonar_connector_filestore (0.3.0) + sonar_ews_pull_connector (0.3.1) + fetch_in (>= 0.2.0) + httpclient (>= 2.1.6.1.1) + ntlm-http (>= 0.1.1) + rews (>= 0.5.0) + rfc822_util (>= 0.1.1) + rsxml (>= 0.1.4) + savon (>= 0.8.6) + sonar_connector (>= 0.7.2) + sonar_exchange_pull_connector (0.6.1) + activesupport (~> 2.3.10) + json_pure (>= 1.2.2) + sonar_connector (>= 0.7.2) + sonar_rexchange (>= 0.3.7) + sonar_imap_pull_connector (0.3.0) + activesupport (>= 2.3.5) + json_pure (>= 1.2.2) + sonar_connector (>= 0.5.1) + sonar_push_connector (0.8.2) + activesupport (>= 2.3.5) + json_pure (>= 1.2.2) + sonar_connector (>= 0.5.1) + sonar_rexchange (0.4.0) + uuidtools (2.1.2) + weakling (0.0.4-java) + +PLATFORMS + java + +DEPENDENCIES + actionmailer (~> 2.3.11) + actionmailer_extensions (= 0.4.4) + activesupport (~> 2.3.11) + httpclient (>= 2.1.7) + jruby-openssl (= 0.7.3) + json_pure + ntlm-http (>= 0.1.3) + rews (>= 0.5.1) + rfc822_util + sonar_connector + sonar_ews_pull_connector + sonar_exchange_pull_connector + sonar_imap_pull_connector + sonar_push_connector + sonar_rexchange + uuidtools diff --git a/tests/packagedcode/data/rubygems/gemfile/2/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/2/origin.ABOUT new file mode 100644 index 00000000000..780232e2f4b --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/2/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/trampoline/sonar-connector-bundle/32734de156fa88b113066df605bf5bf4ae43a442/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/trampoline/sonar-connector-bundle/32734de156fa88b113066df605bf5bf4ae43a442/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/3/Gemfile b/tests/packagedcode/data/rubygems/gemfile/3/Gemfile new file mode 100644 index 00000000000..06ed0c3eb0b --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/3/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' +gemspec :name => "github-linguist" + +group :debug do + gem 'byebug' if RUBY_VERSION >= '2.2' +end diff --git a/tests/packagedcode/data/rubygems/gemfile/3/github-linguist.gemspec b/tests/packagedcode/data/rubygems/gemfile/3/github-linguist.gemspec new file mode 100644 index 00000000000..9ba9e1fea3c --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/3/github-linguist.gemspec @@ -0,0 +1,1732 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + linguist/github-linguist.gemspec at master · github/linguist · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + + +
+ +
+ + + + + + + +
+ + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + + + + +Permalink + +
+ +
+
+ + + master + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + + Go to file + +
+ + + + +
+
+
+ + + + + + + + + +
+ +
+
+ + @lildude + +
+ + + + + + + + + +
+
+ + Latest commit + 3c3b037 + Mar 4, 2022 + + + + + + History + + +
+
+
* Exclude compiled extension excluded from gem
+
+* Be more idomatic
+
+Co-authored-by: John Gardner <gardnerjohng@gmail.com>
+
+Co-authored-by: John Gardner <gardnerjohng@gmail.com>
+ +
+ +
+
+ + + 24 + + contributors + + +
+ +

+ Users who have contributed to this file +

+
+ + + + + + +
+
+ + + @tnm + + @josh + + @lildude + + @arfon + + @vmg + + @brianmario + + @bkeepers + + @aroben + + @brandonblack + + @pchaigno + + @Alhadis + + @ktdreyer + + + +
+
+ + + + + + + + +
+ +
+ + +
+ + + 37 lines (32 sloc) + + 1.53 KB +
+ + + +
+ +
+
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
require File.expand_path('../lib/linguist/version', __FILE__)
+
Gem::Specification.new do |s|
s.name = 'github-linguist'
s.version = ENV['GEM_VERSION'] || Linguist::VERSION
s.summary = "GitHub Language detection"
s.description = 'We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs.'
+
s.authors = "GitHub"
s.homepage = "https://github.com/github/linguist"
s.license = "MIT"
s.metadata = {
"github_repo" => "ssh://github.com/github/linguist"
}
+
s.files = Dir['{lib,ext}/**/*', 'grammars/*', 'LICENSE'] - Dir['lib/linguist/linguist.{so,bundle}']
s.platform = Gem::Platform::RUBY
s.executables = ['github-linguist', 'git-linguist']
s.extensions = ['ext/linguist/extconf.rb']
s.require_paths = ['lib', 'ext']
+
s.add_dependency 'charlock_holmes', '~> 0.7.7'
s.add_dependency 'escape_utils', '~> 1.2.0'
s.add_dependency 'mini_mime', '~> 1.0'
s.add_dependency 'rugged', '~> 1.0'
+
s.add_development_dependency 'minitest', '~> 5.15'
s.add_development_dependency 'rake-compiler', '~> 0.9'
s.add_development_dependency 'mocha', '~> 1.3'
s.add_development_dependency 'plist', '~>3.1'
s.add_development_dependency 'pry', '~> 0.14'
s.add_development_dependency 'rake', '~> 13.0'
s.add_development_dependency 'yajl-ruby', '~> 1.4'
s.add_development_dependency 'licensed', '~> 2.0'
s.add_development_dependency 'licensee', '~> 9.15'
s.add_development_dependency 'bundler', '~> 2.0'
end
+
+ + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + + +
+ +
+ + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/packagedcode/data/rubygems/gemfile/3/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/3/origin.ABOUT new file mode 100644 index 00000000000..732b68c7978 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/3/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/linguist/master/Gemfile +date: 2022-04-01 +download_url: https://github.com/github/linguist/blob/master/github-linguist.gemspec diff --git a/tests/packagedcode/data/rubygems/gemfile/4/Gemfile b/tests/packagedcode/data/rubygems/gemfile/4/Gemfile new file mode 100644 index 00000000000..9ba535a3339 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/4/Gemfile @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +require 'json' +require 'net/http' +versions = JSON.parse(Net::HTTP.get(URI('https://pages.github.com/versions.json'))) + +gem 'github-pages', versions['github-pages'] + +# https://github.com/jekyll/jekyll/issues/8523 +gem 'webrick', '~> 1.7' + +group :development do + gem 'colored' + gem 'fuzzy_match' + gem 'terminal-table' +end + +group :test do + gem 'html-proofer', '~> 3.0' + gem 'licensee', git: 'https://github.com/licensee/licensee.git', branch: 'master' + gem 'rake' + gem 'rspec' + gem 'rubocop' +end diff --git a/tests/packagedcode/data/rubygems/gemfile/4/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/4/origin.ABOUT new file mode 100644 index 00000000000..d991696a886 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/4/origin.ABOUT @@ -0,0 +1,2 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/choosealicense.com/639dac9dc52678b5f6063ad95e6e5f99e5708556/Gemfile diff --git a/tests/packagedcode/data/rubygems/gemfile/5/Gemfile b/tests/packagedcode/data/rubygems/gemfile/5/Gemfile new file mode 100644 index 00000000000..0581a6d60a9 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/5/Gemfile @@ -0,0 +1,7 @@ +source "https://rubygems.org" + +gem 'github-pages', '~> 219', group: :jekyll_plugins +gem 'html-proofer' +gem 'rack-contrib', '~> 1.1.0' +gem 'rake' +gem 'jekyll-octicons' diff --git a/tests/packagedcode/data/rubygems/gemfile/5/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/5/Gemfile.lock new file mode 100644 index 00000000000..68d23d1d385 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/5/Gemfile.lock @@ -0,0 +1,304 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.0.4.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) + concurrent-ruby (1.1.9) + dnsruby (1.61.7) + simpleidn (~> 0.1) + em-websocket (0.5.2) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + ethon (0.12.0) + ffi (>= 1.3.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (1.8.0) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0.1) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.1) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + multipart-post (>= 1.2, < 3) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + ffi (1.15.4) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (219) + github-pages-health-check (= 1.17.7) + jekyll (= 3.9.0) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.6) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.7.1) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.1) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.10.4, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.7) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.0) + activesupport (>= 2) + nokogiri (>= 1.4) + html-proofer (3.15.0) + addressable (~> 2.3) + mercenary (~> 0.3) + nokogumbo (~> 2.0) + parallel (~> 1.3) + rainbow (~> 3.0) + typhoeus (~> 1.3) + yell (~> 2.0) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.9.0) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.6) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1.2) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-octicons (15.2.0) + jekyll (>= 3.6, < 5.0) + octicons (= 15.2.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.7.1) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.1) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.7.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + mini_portile2 (2.6.1) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.14.4) + multipart-post (2.1.1) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) + racc (~> 1.4) + nokogumbo (2.0.2) + nokogiri (~> 1.8, >= 1.8.4) + octicons (15.2.0) + octokit (4.21.0) + faraday (>= 0.9) + sawyer (~> 0.8.0, >= 0.5.3) + parallel (1.19.1) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + racc (1.5.2) + rack (2.2.3) + rack-contrib (1.1.0) + rack (>= 0.9.1) + rainbow (3.0.0) + rake (13.0.1) + rb-fsevent (0.11.0) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby-enum (0.9.0) + i18n + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.8) + unicode-display_width (1.8.0) + yell (2.2.0) + zeitwerk (2.4.2) + +PLATFORMS + ruby + +DEPENDENCIES + github-pages (~> 219) + html-proofer + jekyll-octicons + rack-contrib (~> 1.1.0) + rake + +BUNDLED WITH + 2.2.15 diff --git a/tests/packagedcode/data/rubygems/gemfile/5/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/5/origin.ABOUT new file mode 100644 index 00000000000..69bfb752414 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/5/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/training-kit/7b6f33a1ec1a44a112a5a79e747b5cde28b1d9d3/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/training-kit/7b6f33a1ec1a44a112a5a79e747b5cde28b1d9d3/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/6/Gemfile b/tests/packagedcode/data/rubygems/gemfile/6/Gemfile new file mode 100644 index 00000000000..b4e2a20bb60 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/6/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gemspec diff --git a/tests/packagedcode/data/rubygems/gemfile/6/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/6/origin.ABOUT new file mode 100644 index 00000000000..2189525061e --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/6/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/scientist/main/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/scientist/main/scientist.gemspec diff --git a/tests/packagedcode/data/rubygems/gemfile/6/scientist.gemspec b/tests/packagedcode/data/rubygems/gemfile/6/scientist.gemspec new file mode 100644 index 00000000000..81f7fb4fd5b --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/6/scientist.gemspec @@ -0,0 +1,22 @@ +$: << "lib" and require "scientist/version" + +Gem::Specification.new do |gem| + gem.name = "scientist" + gem.description = "A Ruby library for carefully refactoring critical paths" + gem.version = Scientist::VERSION + gem.authors = ["GitHub Open Source", "John Barnette", "Rick Bradley", "Jesse Toth", "Nathan Witmer"] + gem.email = ["opensource+scientist@github.com", "jbarnette@github.com", "rick@rickbradley.com", "jesseplusplus@github.com","zerowidth@github.com"] + gem.summary = "Carefully test, measure, and track refactored code." + gem.homepage = "https://github.com/github/scientist" + gem.license = "MIT" + + gem.required_ruby_version = '>= 2.3' + + gem.files = `git ls-files`.split($/) + gem.executables = [] + gem.test_files = gem.files.grep(/^test/) + gem.require_paths = ["lib"] + + gem.add_development_dependency "minitest", "~> 5.8" + gem.add_development_dependency "rake" +end diff --git a/tests/packagedcode/data/rubygems/gemfile/7/Gemfile b/tests/packagedcode/data/rubygems/gemfile/7/Gemfile new file mode 100644 index 00000000000..aef4cd9422a --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/7/Gemfile @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } + +gem "rubocop", "~> 1.26.1" +gem "rubocop-github", "~> 0.17.0" +gem "rubocop-performance", "~>1.13.3" +gem "rubocop-rails", "~> 2.14" +gem "rubocop-rspec", "~> 2.9.0" diff --git a/tests/packagedcode/data/rubygems/gemfile/7/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/7/Gemfile.lock new file mode 100644 index 00000000000..4607556df24 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/7/Gemfile.lock @@ -0,0 +1,61 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (7.0.2.3) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + ast (2.4.2) + concurrent-ruby (1.1.9) + i18n (1.10.0) + concurrent-ruby (~> 1.0) + minitest (5.15.0) + parallel (1.22.1) + parser (3.1.1.0) + ast (~> 2.4.1) + rack (2.2.3) + rainbow (3.1.1) + regexp_parser (2.2.1) + rexml (3.2.5) + rubocop (1.26.1) + parallel (~> 1.10) + parser (>= 3.1.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.16.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.16.0) + parser (>= 3.1.1.0) + rubocop-github (0.17.0) + rubocop + rubocop-performance + rubocop-rails + rubocop-performance (1.13.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rails (2.14.2) + activesupport (>= 4.2.0) + rack (>= 1.1) + rubocop (>= 1.7.0, < 2.0) + rubocop-rspec (2.9.0) + rubocop (~> 1.19) + ruby-progressbar (1.11.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + unicode-display_width (2.1.0) + +PLATFORMS + ruby + +DEPENDENCIES + rubocop (~> 1.26.1) + rubocop-github (~> 0.17.0) + rubocop-performance (~> 1.13.3) + rubocop-rails (~> 2.14) + rubocop-rspec (~> 2.9.0) + +BUNDLED WITH + 2.3.7 diff --git a/tests/packagedcode/data/rubygems/gemfile/7/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/7/origin.ABOUT new file mode 100644 index 00000000000..a27f765bdf7 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/7/origin.ABOUT @@ -0,0 +1,4 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/super-linter/main/dependencies/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/super-linter/main/dependencies/Gemfile.lock diff --git a/tests/packagedcode/data/rubygems/gemfile/8/Gemfile b/tests/packagedcode/data/rubygems/gemfile/8/Gemfile new file mode 100644 index 00000000000..d775f65688e --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/8/Gemfile @@ -0,0 +1,8 @@ +source "https://rubygems.org" + +gemspec + +group :benchmark do + gem "mysql2" + gem "benchmark-ips" +end diff --git a/tests/packagedcode/data/rubygems/gemfile/8/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/8/Gemfile.lock new file mode 100644 index 00000000000..e5ba309a296 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/8/Gemfile.lock @@ -0,0 +1,24 @@ +PATH + remote: . + specs: + trilogy (2.1.0) + +GEM + remote: https://rubygems.org/ + specs: + benchmark-ips (2.7.2) + minitest (5.11.3) + mysql2 (0.5.2) + rake (13.0.1) + rake-compiler (1.0.7) + rake + +PLATFORMS + ruby + +DEPENDENCIES + benchmark-ips + minitest (~> 5.5) + mysql2 + rake-compiler (~> 1.0) + trilogy! diff --git a/tests/packagedcode/data/rubygems/gemfile/8/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/8/origin.ABOUT new file mode 100644 index 00000000000..86236e0a6f6 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/8/origin.ABOUT @@ -0,0 +1,6 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/trilogy/7057f3685b4d6e9b58c47dde9f6dab6cb12f753a/contrib/ruby/Gemfile +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/trilogy/7057f3685b4d6e9b58c47dde9f6dab6cb12f753a/contrib/ruby/Gemfile.lock +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/trilogy/7057f3685b4d6e9b58c47dde9f6dab6cb12f753a/contrib/ruby/trilogy.gemspec diff --git a/tests/packagedcode/data/rubygems/gemfile/8/trilogy.gemspec b/tests/packagedcode/data/rubygems/gemfile/8/trilogy.gemspec new file mode 100644 index 00000000000..bee5d0f3f5e --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/8/trilogy.gemspec @@ -0,0 +1,27 @@ +require File.expand_path("../lib/trilogy/version", __FILE__) + +Gem::Specification.new do |s| + s.name = "trilogy" + s.version = Trilogy::VERSION + s.authors = ["GitHub Engineering"] + s.email = "opensource+trilogy@github.com" + s.license = "MIT" + s.homepage = "https://github.com/github/trilogy" + s.summary = "A friendly MySQL-compatible library for Ruby, binding to libtrilogy" + + s.extensions = "ext/trilogy-ruby/extconf.rb" + + gem_files = %w[LICENSE README.md Rakefile trilogy.gemspec] + gem_files += Dir.glob("lib/**/*.rb") + gem_files += Dir.glob("ext/trilogy-ruby/*.c") + gem_files += Dir.glob("ext/trilogy-ruby/*.h") + gem_files += Dir.glob("ext/trilogy-ruby/src/**/*.c") + gem_files += Dir.glob("ext/trilogy-ruby/inc/**/*.h") + + s.files = gem_files + + s.require_paths = ["lib"] + + s.add_development_dependency "rake-compiler", "~> 1.0" + s.add_development_dependency "minitest", "~> 5.5" +end diff --git a/tests/packagedcode/data/rubygems/gemfile/9/Gemfile b/tests/packagedcode/data/rubygems/gemfile/9/Gemfile new file mode 100644 index 00000000000..b4e2a20bb60 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/9/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gemspec diff --git a/tests/packagedcode/data/rubygems/gemfile/9/Gemfile.lock b/tests/packagedcode/data/rubygems/gemfile/9/Gemfile.lock new file mode 100644 index 00000000000..f464a73b099 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/9/Gemfile.lock @@ -0,0 +1,41 @@ +PATH + remote: . + specs: + ssh_data (1.3.0) + +GEM + remote: https://rubygems.org/ + specs: + coderay (1.1.3) + diff-lcs (1.4.4) + ed25519 (1.2.4) + method_source (1.0.0) + pry (0.14.0) + coderay (~> 1.1) + method_source (~> 1.0) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + +PLATFORMS + ruby + +DEPENDENCIES + ed25519 (~> 1.2) + pry (~> 0.14) + rspec (~> 3.10) + rspec-mocks (~> 3.10) + ssh_data! + +BUNDLED WITH + 2.1.4 diff --git a/tests/packagedcode/data/rubygems/gemfile/9/origin.ABOUT b/tests/packagedcode/data/rubygems/gemfile/9/origin.ABOUT new file mode 100644 index 00000000000..ad47d32e07f --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/9/origin.ABOUT @@ -0,0 +1,6 @@ +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/ssh_data/a1b98d5fdf9cdd691e146ce3a79b118a7ce39ff3/ssh_data.gemspec +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/ssh_data/a1b98d5fdf9cdd691e146ce3a79b118a7ce39ff3/Gemfile.lock +date: 2022-04-01 +download_url: https://raw.githubusercontent.com/github/ssh_data/a1b98d5fdf9cdd691e146ce3a79b118a7ce39ff3/Gemfile diff --git a/tests/packagedcode/data/rubygems/gemfile/9/ssh_data.gemspec b/tests/packagedcode/data/rubygems/gemfile/9/ssh_data.gemspec new file mode 100644 index 00000000000..aa85ee116c3 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemfile/9/ssh_data.gemspec @@ -0,0 +1,19 @@ +$:.unshift File.expand_path('../lib', __FILE__) +require "ssh_data/version" + +Gem::Specification.new do |s| + s.name = "ssh_data" + s.summary = "Library for parsing SSH certificates" + s.version = SSHData::VERSION + s.license = "MIT" + s.homepage = "https://github.com/github/ssh_data" + s.authors = ["mastahyeti"] + s.email = "opensource+ssh_data@github.com" + s.required_ruby_version = ">= 2.3" + s.files = Dir["./lib/**/*.rb"] + ["./LICENSE.md"] + + s.add_development_dependency "ed25519", "~> 1.2" + s.add_development_dependency "pry", "~> 0.14" + s.add_development_dependency "rspec", "~> 3.10" + s.add_development_dependency "rspec-mocks", "~> 3.10" +end diff --git a/tests/packagedcode/data/rubygems/gemspec/address_standardization.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/address_standardization.gemspec.expected.json index d058212f19b..9e30ada55d0 100644 --- a/tests/packagedcode/data/rubygems/gemspec/address_standardization.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/address_standardization.gemspec.expected.json @@ -19,7 +19,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "elliot.winkler@gmail.com", "url": null @@ -27,7 +27,7 @@ ], "keywords": [], "homepage_url": "http://github.com/mcmire/address_standardization", - "download_url": null, + "download_url": "https://rubygems.org/downloads/mysmallidea-address_standardization-0.4.1.gem", "size": null, "sha1": null, "md5": null, @@ -40,14 +40,50 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/mcmire-context", "extracted_requirement": ">= 0", - "scope": "dependencies", + "scope": "development", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mcmire-matchy", + "extracted_requirement": ">= 0", + "scope": "development", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mechanize", + "extracted_requirement": ">= 0", + "scope": "runtime", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mechanize", + "extracted_requirement": ">= 0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mcmire-context", + "extracted_requirement": ">= 0", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -56,7 +92,7 @@ { "purl": "pkg:gem/mcmire-matchy", "extracted_requirement": ">= 0", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -65,16 +101,35 @@ { "purl": "pkg:gem/mechanize", "extracted_requirement": ">= 0", - "scope": "dependencies", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mcmire-context", + "extracted_requirement": ">= 0", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/mcmire-matchy", + "extracted_requirement": ">= 0", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/mysmallidea-address_standardization@0.4.1", "repository_homepage_url": "https://rubygems.org/gems/mysmallidea-address_standardization/versions/0.4.1", "repository_download_url": "https://rubygems.org/downloads/mysmallidea-address_standardization-0.4.1.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-address_standardization/versions/0.4.1.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mysmallidea-address_standardization/versions/0.4.1.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/mysmallidea-address_standardization@0.4.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/arel.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/arel.gemspec.expected.json index f0755192a6b..2fdec6b5d5c 100644 --- a/tests/packagedcode/data/rubygems/gemspec/arel.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/arel.gemspec.expected.json @@ -40,28 +40,28 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "aaron@tenderlovemaking.com", "url": null }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": " bryan@brynary.com", "url": null }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": " miloops@gmail.com", "url": null }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": " nick@example.org", "url": null @@ -69,7 +69,7 @@ ], "keywords": [], "homepage_url": "http://github.com/rails/arel", - "download_url": null, + "download_url": "https://rubygems.org/downloads/arel-2.0.7.beta.20110429111451.gem", "size": null, "sha1": null, "md5": null, @@ -82,14 +82,50 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/minitest", "extracted_requirement": ">= 2.0.2", - "scope": "dependencies", + "scope": "development", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/hoe", + "extracted_requirement": ">= 2.9.1", + "scope": "development", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/minitest", + "extracted_requirement": ">= 2.0.2", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/hoe", + "extracted_requirement": ">= 2.9.1", + "scope": "dependency", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:gem/minitest", + "extracted_requirement": ">= 2.0.2", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -98,16 +134,17 @@ { "purl": "pkg:gem/hoe", "extracted_requirement": ">= 2.9.1", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/arel@2.0.7.beta.20110429111451", "repository_homepage_url": "https://rubygems.org/gems/arel/versions/2.0.7.beta.20110429111451", "repository_download_url": "https://rubygems.org/downloads/arel-2.0.7.beta.20110429111451.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/arel/versions/2.0.7.beta.20110429111451.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/arel/versions/2.0.7.beta.20110429111451.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/arel@2.0.7.beta.20110429111451" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/cat.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/cat.gemspec.expected.json index 4cc01f7ac5f..8b4808371a2 100644 --- a/tests/packagedcode/data/rubygems/gemspec/cat.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/cat.gemspec.expected.json @@ -19,7 +19,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "elct9620@frost.tw", "url": null @@ -27,7 +27,7 @@ ], "keywords": [], "homepage_url": "https://github.com/elct9620/.cat", - "download_url": null, + "download_url": "https://rubygems.org/downloads/cat_-12.gem", "size": null, "sha1": null, "md5": null, @@ -40,41 +40,41 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/bundler", "extracted_requirement": "~> 1.13", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rake", "extracted_requirement": "~> 10.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rspec", "extracted_requirement": "~> 3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rack", "extracted_requirement": "", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -83,7 +83,7 @@ { "purl": "pkg:gem/sassc", "extracted_requirement": "", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -92,16 +92,17 @@ { "purl": "pkg:gem/slim", "extracted_requirement": "", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/cat_@12", "repository_homepage_url": "https://rubygems.org/gems/cat_/versions/12", "repository_download_url": "https://rubygems.org/downloads/cat_-12.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/cat_/versions/12.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/cat_/versions/12.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/cat_@12" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/github.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/github.gemspec.expected.json index 2415ff9116a..f1a33a84b99 100644 --- a/tests/packagedcode/data/rubygems/gemspec/github.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/github.gemspec.expected.json @@ -40,7 +40,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "drnicwilliams@gmail.com", "url": null @@ -48,7 +48,7 @@ ], "keywords": [], "homepage_url": "https://github.com/defunkt/github-gem", - "download_url": null, + "download_url": "https://rubygems.org/downloads/github-GitHub::VERSION.gem", "size": null, "sha1": null, "md5": null, @@ -61,41 +61,41 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/rake", "extracted_requirement": "", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rspec", "extracted_requirement": "~>1.3.1", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/activerecord", "extracted_requirement": "~>3.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/text-hyphen", "extracted_requirement": "1.0.0", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -104,7 +104,7 @@ { "purl": "pkg:gem/text-format", "extracted_requirement": "1.0.0", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -113,7 +113,7 @@ { "purl": "pkg:gem/highline", "extracted_requirement": "~> 1.6", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -122,7 +122,7 @@ { "purl": "pkg:gem/json_pure", "extracted_requirement": "~> 1.5.1", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -131,16 +131,17 @@ { "purl": "pkg:gem/launchy", "extracted_requirement": "~> 2.0.2", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/github@GitHub::VERSION", "repository_homepage_url": "https://rubygems.org/gems/github/versions/GitHub::VERSION", "repository_download_url": "https://rubygems.org/downloads/github-GitHub::VERSION.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/github/versions/GitHub::VERSION.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/github/versions/GitHub::VERSION.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/github@GitHub::VERSION" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop-3.0.5.gemspec b/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop-3.0.5.gemspec new file mode 100644 index 00000000000..3b8d8050d4f --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop-3.0.5.gemspec @@ -0,0 +1,33 @@ +# -*- encoding: utf-8 -*- +# stub: logstash-filter-drop 3.0.5 ruby lib + +Gem::Specification.new do |s| + s.name = "logstash-filter-drop".freeze + s.version = "3.0.5" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "logstash_group" => "filter", "logstash_plugin" => "true" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["Elastic".freeze] + s.date = "2017-11-07" + s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program".freeze + s.email = "info@elastic.co".freeze + s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html".freeze + s.licenses = ["Apache License (2.0)".freeze] + s.rubygems_version = "3.1.6".freeze + s.summary = "Drops all events".freeze + + s.installed_by_version = "3.1.6" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + end + + if s.respond_to? :add_runtime_dependency then + s.add_runtime_dependency(%q.freeze, [">= 1.60", "<= 2.99"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + else + s.add_dependency(%q.freeze, [">= 1.60", "<= 2.99"]) + s.add_dependency(%q.freeze, [">= 0"]) + end +end diff --git a/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop.gemspec b/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop.gemspec new file mode 100644 index 00000000000..f9b99d79617 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemspec/installed-combo/logstash-filter-drop.gemspec @@ -0,0 +1,27 @@ +Gem::Specification.new do |s| + + s.name = 'logstash-filter-drop' + s.version = '3.0.5' + s.licenses = ['Apache License (2.0)'] + s.summary = "Drops all events" + s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program" + s.authors = ["Elastic"] + s.email = 'info@elastic.co' + s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html" + s.require_paths = ["lib"] + + # Files + s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"] + + # Tests + s.test_files = s.files.grep(%r{^(test|spec|features)/}) + + # Special flag to let us know this is actually a logstash plugin + s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" } + + # Gem dependencies + s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99" + + s.add_development_dependency 'logstash-devutils' +end + diff --git a/tests/packagedcode/data/rubygems/gemspec/mecab-ruby.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/mecab-ruby.gemspec.expected.json index 03f199e4177..7170e859dce 100644 --- a/tests/packagedcode/data/rubygems/gemspec/mecab-ruby.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/mecab-ruby.gemspec.expected.json @@ -7,7 +7,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Ruby", - "description": "Ruby bindings for MeCab, a morphological analyzer.", + "description": "Ruby bindings for MeCab.\nRuby bindings for MeCab, a morphological analyzer.", "release_date": null, "parties": [ { @@ -19,7 +19,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "taku@chasen.org", "url": null @@ -27,7 +27,7 @@ ], "keywords": [], "homepage_url": "http://mecab.sourceforge.net/", - "download_url": null, + "download_url": "https://rubygems.org/downloads/mecab-ruby-0.99.gem", "size": null, "sha1": null, "md5": null, @@ -40,13 +40,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:gem/mecab-ruby@0.99", "repository_homepage_url": "https://rubygems.org/gems/mecab-ruby/versions/0.99", "repository_download_url": "https://rubygems.org/downloads/mecab-ruby-0.99.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/mecab-ruby/versions/0.99.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/mecab-ruby/versions/0.99.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/mecab-ruby@0.99" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/oj.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/oj.gemspec.expected.json index d553e5185e2..c979de0ad41 100644 --- a/tests/packagedcode/data/rubygems/gemspec/oj.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/oj.gemspec.expected.json @@ -7,7 +7,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Ruby", - "description": "The fastest JSON parser and object serializer.", + "description": "A fast JSON parser and serializer.\nThe fastest JSON parser and object serializer.", "release_date": null, "parties": [ { @@ -19,7 +19,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "peter@ohler.com", "url": null @@ -27,7 +27,7 @@ ], "keywords": [], "homepage_url": "http://www.ohler.com/oj", - "download_url": null, + "download_url": "https://rubygems.org/downloads/oj-::Oj::VERSION.gem", "size": null, "sha1": null, "md5": null, @@ -40,50 +40,51 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/rake-compiler", "extracted_requirement": ">= 0.9, < 2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/minitest", "extracted_requirement": "~> 5", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/test-unit", "extracted_requirement": "~> 3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/wwtd", "extracted_requirement": "~> 0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/oj@::Oj::VERSION", "repository_homepage_url": "https://rubygems.org/gems/oj/versions/::Oj::VERSION", "repository_download_url": "https://rubygems.org/downloads/oj-::Oj::VERSION.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/oj/versions/::Oj::VERSION.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/oj/versions/::Oj::VERSION.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/oj@::Oj::VERSION" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/red-datasets-numo-narray.gemspec b/tests/packagedcode/data/rubygems/gemspec/red-datasets-numo-narray.gemspec new file mode 100644 index 00000000000..ab2f6e395b0 --- /dev/null +++ b/tests/packagedcode/data/rubygems/gemspec/red-datasets-numo-narray.gemspec @@ -0,0 +1,44 @@ +# -*- ruby -*- + +clean_white_space = lambda do |entry| + entry.gsub(/(\A\n+|\n+\z)/, '') + "\n" +end + +$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib")) +require "datasets-numo-narray/version" + +Gem::Specification.new do |spec| + spec.name = "red-datasets-numo-narray" + spec.version = DatasetsNumoNArray::VERSION + spec.homepage = "https://github.com/red-data-tools/red-datasets-numo-narray" + spec.authors = ["Kouhei Sutou"] + spec.email = ["kou@clear-code.com"] + + readme = File.read("README.md") + readme.force_encoding("UTF-8") + entries = readme.split(/^\#\#\s(.*)$/) + clean_white_space.call(entries[entries.index("Description") + 1]) + description = clean_white_space.call(entries[entries.index("Description") + 1]) + spec.summary, spec.description, = description.split(/\n\n+/, 3) + spec.license = "MIT" + spec.files = [ + "README.md", + "LICENSE.txt", + "Rakefile", + "Gemfile", + "#{spec.name}.gemspec", + ] + spec.files += [".yardopts"] + spec.files += Dir.glob("lib/**/*.rb") + spec.files += Dir.glob("doc/text/*") + spec.test_files += Dir.glob("test/**/*") + + spec.add_runtime_dependency("numo-narray") + spec.add_runtime_dependency("red-datasets") + + spec.add_development_dependency("bundler") + spec.add_development_dependency("rake") + spec.add_development_dependency("test-unit") + spec.add_development_dependency("yard") + spec.add_development_dependency("kramdown") +end diff --git a/tests/packagedcode/data/rubygems/gemspec/rubocop.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/rubocop.gemspec.expected.json index 7c9a169c49d..f58933ceffb 100644 --- a/tests/packagedcode/data/rubygems/gemspec/rubocop.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/rubocop.gemspec.expected.json @@ -33,7 +33,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "rubocop@googlegroups.com", "url": null @@ -41,7 +41,7 @@ ], "keywords": [], "homepage_url": "https://github.com/rubocop-hq/rubocop", - "download_url": null, + "download_url": "https://rubygems.org/downloads/rubocop-RuboCop::Version::STRING.gem", "size": null, "sha1": null, "md5": null, @@ -54,32 +54,32 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/bundler", "extracted_requirement": ">= 1.3.0, < 3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rack", "extracted_requirement": ">= 2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/jaro_winkler", "extracted_requirement": "~> 1.5.1", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -88,7 +88,7 @@ { "purl": "pkg:gem/parallel", "extracted_requirement": "~> 1.10", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -97,7 +97,7 @@ { "purl": "pkg:gem/parser", "extracted_requirement": ">= 2.5", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -106,7 +106,7 @@ { "purl": "pkg:gem/powerpack", "extracted_requirement": "~> 0.1", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -115,7 +115,7 @@ { "purl": "pkg:gem/rainbow", "extracted_requirement": ">= 2.2.2, < 4.0", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -124,7 +124,7 @@ { "purl": "pkg:gem/ruby-progressbar", "extracted_requirement": "~> 1.7", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -133,16 +133,17 @@ { "purl": "pkg:gem/unicode-display_width", "extracted_requirement": "~> 1.4.0", - "scope": "dependencies", + "scope": "runtime", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/rubocop@RuboCop::Version::STRING", "repository_homepage_url": "https://rubygems.org/gems/rubocop/versions/RuboCop::Version::STRING", "repository_download_url": "https://rubygems.org/downloads/rubocop-RuboCop::Version::STRING.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/rubocop/versions/RuboCop::Version::STRING.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/rubocop/versions/RuboCop::Version::STRING.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/rubocop@RuboCop::Version::STRING" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/gemspec/with_variables.gemspec.expected.json b/tests/packagedcode/data/rubygems/gemspec/with_variables.gemspec.expected.json index 58f78628d94..58feb69fd53 100644 --- a/tests/packagedcode/data/rubygems/gemspec/with_variables.gemspec.expected.json +++ b/tests/packagedcode/data/rubygems/gemspec/with_variables.gemspec.expected.json @@ -7,7 +7,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Ruby", - "description": "See the project home page for more information", + "description": "ProviderDSL::GemDescription::SUMMARY\nSee the project home page for more information", "release_date": null, "parties": [ { @@ -19,7 +19,7 @@ }, { "type": "person", - "role": "email", + "role": "author", "name": null, "email": "ProviderDSL::GemDescription::EMAIL", "url": null @@ -27,7 +27,7 @@ ], "keywords": [], "homepage_url": "ProviderDSL::GemDescription::PAGE", - "download_url": null, + "download_url": "https://rubygems.org/downloads/ProviderDSL::GemDescription::NAME-ProviderDSL::GemDescription::VERSION.gem", "size": null, "sha1": null, "md5": null, @@ -40,50 +40,50 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { "purl": "pkg:gem/rake", "extracted_requirement": "~> 11.3", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rubocop", "extracted_requirement": "~> 0.44.1", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rspec", "extracted_requirement": "~> 3.5", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/rspec-mocks", "extracted_requirement": "~> 3.5", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, + "scope": "development", + "is_runtime": false, + "is_optional": true, "is_resolved": false, "resolved_package": {} }, { "purl": "pkg:gem/ipaddress", "extracted_requirement": "~> 0.8.3", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -92,7 +92,7 @@ { "purl": "pkg:gem/gandi", "extracted_requirement": "~> 3.3, >= 3.3.27", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -101,7 +101,7 @@ { "purl": "pkg:gem/gcloud", "extracted_requirement": "~> 0.21.0", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -110,7 +110,7 @@ { "purl": "pkg:gem/google-cloud-error_reporting", "extracted_requirement": "~> 0.21.0", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -119,16 +119,17 @@ { "purl": "pkg:gem/map", "extracted_requirement": "~> 6.6", - "scope": "dependencies", + "scope": "dependency", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:gem/ProviderDSL::GemDescription::NAME@ProviderDSL::GemDescription::VERSION", "repository_homepage_url": "https://rubygems.org/gems/ProviderDSL::GemDescription::NAME/versions/ProviderDSL::GemDescription::VERSION", "repository_download_url": "https://rubygems.org/downloads/ProviderDSL::GemDescription::NAME-ProviderDSL::GemDescription::VERSION.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/ProviderDSL::GemDescription::NAME/versions/ProviderDSL::GemDescription::VERSION.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/ProviderDSL::GemDescription::NAME/versions/ProviderDSL::GemDescription::VERSION.json", + "datasource_id": "gemspec", + "purl": "pkg:gem/ProviderDSL::GemDescription::NAME@ProviderDSL::GemDescription::VERSION" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rubygems/installed/specifications/actiontext-6.1.4.gemspec b/tests/packagedcode/data/rubygems/installed/specifications/actiontext-6.1.4.gemspec new file mode 100644 index 00000000000..5f0f845370c --- /dev/null +++ b/tests/packagedcode/data/rubygems/installed/specifications/actiontext-6.1.4.gemspec @@ -0,0 +1,46 @@ +# -*- encoding: utf-8 -*- +# stub: actiontext 6.1.4 ruby lib + +Gem::Specification.new do |s| + s.name = "actiontext".freeze + s.version = "6.1.4" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "bug_tracker_uri" => "https://github.com/rails/rails/issues", "changelog_uri" => "https://github.com/rails/rails/blob/v6.1.4/actiontext/CHANGELOG.md", "documentation_uri" => "https://api.rubyonrails.org/v6.1.4/", "mailing_list_uri" => "https://discuss.rubyonrails.org/c/rubyonrails-talk", "source_code_uri" => "https://github.com/rails/rails/tree/v6.1.4/actiontext" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["Javan Makhmali".freeze, "Sam Stephenson".freeze, "David Heinemeier Hansson".freeze] + s.date = "2021-06-24" + s.description = "Edit and display rich text in Rails applications.".freeze + s.email = ["javan@javan.us".freeze, "sstephenson@gmail.com".freeze, "david@loudthinking.com".freeze] + s.homepage = "https://rubyonrails.org".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze) + s.rubygems_version = "3.0.3".freeze + s.summary = "Rich text framework.".freeze + + s.installed_by_version = "3.0.3" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q.freeze, ["= 6.1.4"]) + s.add_runtime_dependency(%q.freeze, ["= 6.1.4"]) + s.add_runtime_dependency(%q.freeze, ["= 6.1.4"]) + s.add_runtime_dependency(%q.freeze, ["= 6.1.4"]) + s.add_runtime_dependency(%q.freeze, [">= 1.8.5"]) + else + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, [">= 1.8.5"]) + end + else + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, ["= 6.1.4"]) + s.add_dependency(%q.freeze, [">= 1.8.5"]) + end +end diff --git a/tests/packagedcode/data/rubygems/installed/specifications/clamp-1.0.1.gemspec b/tests/packagedcode/data/rubygems/installed/specifications/clamp-1.0.1.gemspec new file mode 100644 index 00000000000..1456fc1b618 --- /dev/null +++ b/tests/packagedcode/data/rubygems/installed/specifications/clamp-1.0.1.gemspec @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +# stub: clamp 1.0.1 ruby lib + +Gem::Specification.new do |s| + s.name = "clamp".freeze + s.version = "1.0.1" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Mike Williams".freeze] + s.date = "2016-10-01" + s.description = "Clamp provides an object-model for command-line utilities.\nIt handles parsing of command-line options, and generation of usage help.\n".freeze + s.email = "mdub@dogbiscuit.org".freeze + s.homepage = "http://github.com/mdub/clamp".freeze + s.licenses = ["MIT".freeze] + s.rubygems_version = "3.1.6".freeze + s.summary = "a minimal framework for command-line utilities".freeze + + s.installed_by_version = "3.1.6" if s.respond_to? :installed_by_version +end diff --git a/tests/packagedcode/data/rubygems/installed/specifications/racc-1.5.2.gemspec b/tests/packagedcode/data/rubygems/installed/specifications/racc-1.5.2.gemspec new file mode 100644 index 00000000000..d87425ccd1f --- /dev/null +++ b/tests/packagedcode/data/rubygems/installed/specifications/racc-1.5.2.gemspec @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +# stub: racc 1.5.2 ruby lib +# stub: ext/racc/cparse/extconf.rb + +Gem::Specification.new do |s| + s.name = "racc".freeze + s.version = "1.5.2" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Minero Aoki".freeze, "Aaron Patterson".freeze] + s.date = "2020-12-26" + s.description = "Racc is a LALR(1) parser generator.\n It is written in Ruby itself, and generates Ruby program.\n\n NOTE: Ruby 1.8.x comes with Racc runtime module. You\n can run your parsers generated by racc 1.4.x out of the\n box.\n".freeze + s.email = [nil, "aaron@tenderlovemaking.com".freeze] + s.executables = ["racc".freeze] + s.extensions = ["ext/racc/cparse/extconf.rb".freeze] + s.extra_rdoc_files = ["README.ja.rdoc".freeze, "README.rdoc".freeze, "rdoc/en/NEWS.en.rdoc".freeze, "rdoc/en/grammar.en.rdoc".freeze, "rdoc/ja/NEWS.ja.rdoc".freeze, "rdoc/ja/debug.ja.rdoc".freeze, "rdoc/ja/grammar.ja.rdoc".freeze, "rdoc/ja/parser.ja.rdoc".freeze] + s.files = ["README.ja.rdoc".freeze, "README.rdoc".freeze, "bin/racc".freeze, "ext/racc/cparse/extconf.rb".freeze, "rdoc/en/NEWS.en.rdoc".freeze, "rdoc/en/grammar.en.rdoc".freeze, "rdoc/ja/NEWS.ja.rdoc".freeze, "rdoc/ja/debug.ja.rdoc".freeze, "rdoc/ja/grammar.ja.rdoc".freeze, "rdoc/ja/parser.ja.rdoc".freeze] + s.homepage = "http://i.loveruby.net/en/projects/racc/".freeze + s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze] + s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] + s.rubygems_version = "3.0.3".freeze + s.summary = "Racc is a LALR(1) parser generator".freeze + + s.installed_by_version = "3.0.3" if s.respond_to? :installed_by_version +end diff --git a/tests/packagedcode/data/rubygems/installed/specifications/rexml-3.2.5.gemspec b/tests/packagedcode/data/rubygems/installed/specifications/rexml-3.2.5.gemspec new file mode 100644 index 00000000000..b664b0d1f4d --- /dev/null +++ b/tests/packagedcode/data/rubygems/installed/specifications/rexml-3.2.5.gemspec @@ -0,0 +1,38 @@ +# -*- encoding: utf-8 -*- +# stub: rexml 3.2.5 ruby lib + +Gem::Specification.new do |s| + s.name = "rexml".freeze + s.version = "3.2.5" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Kouhei Sutou".freeze] + s.bindir = "exe".freeze + s.date = "2021-04-05" + s.description = "An XML toolkit for Ruby".freeze + s.email = ["kou@cozmixng.org".freeze] + s.extra_rdoc_files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/rexml/context.rdoc".freeze, "doc/rexml/tasks/rdoc/child.rdoc".freeze, "doc/rexml/tasks/rdoc/document.rdoc".freeze, "doc/rexml/tasks/rdoc/element.rdoc".freeze, "doc/rexml/tasks/rdoc/node.rdoc".freeze, "doc/rexml/tasks/rdoc/parent.rdoc".freeze, "doc/rexml/tasks/tocs/child_toc.rdoc".freeze, "doc/rexml/tasks/tocs/document_toc.rdoc".freeze, "doc/rexml/tasks/tocs/element_toc.rdoc".freeze, "doc/rexml/tasks/tocs/master_toc.rdoc".freeze, "doc/rexml/tasks/tocs/node_toc.rdoc".freeze, "doc/rexml/tasks/tocs/parent_toc.rdoc".freeze] + s.files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/rexml/context.rdoc".freeze, "doc/rexml/tasks/rdoc/child.rdoc".freeze, "doc/rexml/tasks/rdoc/document.rdoc".freeze, "doc/rexml/tasks/rdoc/element.rdoc".freeze, "doc/rexml/tasks/rdoc/node.rdoc".freeze, "doc/rexml/tasks/rdoc/parent.rdoc".freeze, "doc/rexml/tasks/tocs/child_toc.rdoc".freeze, "doc/rexml/tasks/tocs/document_toc.rdoc".freeze, "doc/rexml/tasks/tocs/element_toc.rdoc".freeze, "doc/rexml/tasks/tocs/master_toc.rdoc".freeze, "doc/rexml/tasks/tocs/node_toc.rdoc".freeze, "doc/rexml/tasks/tocs/parent_toc.rdoc".freeze] + s.homepage = "https://github.com/ruby/rexml".freeze + s.licenses = ["BSD-2-Clause".freeze] + s.rdoc_options = ["--main".freeze, "README.md".freeze] + s.rubygems_version = "3.1.6".freeze + s.summary = "An XML toolkit for Ruby".freeze + + s.installed_by_version = "3.1.6" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + end + + if s.respond_to? :add_runtime_dependency then + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + else + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + end +end diff --git a/tests/packagedcode/data/rubygems/installed/specifications/sequel-5.53.0.gemspec b/tests/packagedcode/data/rubygems/installed/specifications/sequel-5.53.0.gemspec new file mode 100644 index 00000000000..566c39fbc71 --- /dev/null +++ b/tests/packagedcode/data/rubygems/installed/specifications/sequel-5.53.0.gemspec @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- +# stub: sequel 5.53.0 ruby lib + +Gem::Specification.new do |s| + s.name = "sequel".freeze + s.version = "5.53.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "bug_tracker_uri" => "https://github.com/jeremyevans/sequel/issues", "changelog_uri" => "http://sequel.jeremyevans.net/rdoc/files/CHANGELOG.html", "documentation_uri" => "http://sequel.jeremyevans.net/documentation.html", "mailing_list_uri" => "https://github.com/jeremyevans/sequel/discussions", "source_code_uri" => "https://github.com/jeremyevans/sequel" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["Jeremy Evans".freeze] + s.date = "2022-02-01" + s.description = "The Database Toolkit for Ruby".freeze + s.email = "code@jeremyevans.net".freeze + s.executables = ["sequel".freeze] + s.extra_rdoc_files = ["README.rdoc".freeze, "CHANGELOG".freeze, "MIT-LICENSE".freeze, "doc/advanced_associations.rdoc".freeze, "doc/association_basics.rdoc".freeze, "doc/bin_sequel.rdoc".freeze, "doc/cheat_sheet.rdoc".freeze, "doc/code_order.rdoc".freeze, "doc/core_extensions.rdoc".freeze, "doc/dataset_basics.rdoc".freeze, "doc/dataset_filtering.rdoc".freeze, "doc/extensions.rdoc".freeze, "doc/fork_safety.rdoc".freeze, "doc/mass_assignment.rdoc".freeze, "doc/migration.rdoc".freeze, "doc/model_dataset_method_design.rdoc".freeze, "doc/model_hooks.rdoc".freeze, "doc/model_plugins.rdoc".freeze, "doc/mssql_stored_procedures.rdoc".freeze, "doc/object_model.rdoc".freeze, "doc/opening_databases.rdoc".freeze, "doc/postgresql.rdoc".freeze, "doc/prepared_statements.rdoc".freeze, "doc/querying.rdoc".freeze, "doc/reflection.rdoc".freeze, "doc/schema_modification.rdoc".freeze, "doc/security.rdoc".freeze, "doc/sharding.rdoc".freeze, "doc/sql.rdoc".freeze, "doc/testing.rdoc".freeze, "doc/thread_safety.rdoc".freeze, "doc/transactions.rdoc".freeze, "doc/validations.rdoc".freeze, "doc/virtual_rows.rdoc".freeze, "doc/release_notes/5.0.0.txt".freeze, "doc/release_notes/5.1.0.txt".freeze, "doc/release_notes/5.10.0.txt".freeze, "doc/release_notes/5.11.0.txt".freeze, "doc/release_notes/5.12.0.txt".freeze, "doc/release_notes/5.13.0.txt".freeze, "doc/release_notes/5.14.0.txt".freeze, "doc/release_notes/5.15.0.txt".freeze, "doc/release_notes/5.16.0.txt".freeze, "doc/release_notes/5.17.0.txt".freeze, "doc/release_notes/5.18.0.txt".freeze, "doc/release_notes/5.19.0.txt".freeze, "doc/release_notes/5.2.0.txt".freeze, "doc/release_notes/5.20.0.txt".freeze, "doc/release_notes/5.21.0.txt".freeze, "doc/release_notes/5.22.0.txt".freeze, "doc/release_notes/5.23.0.txt".freeze, "doc/release_notes/5.24.0.txt".freeze, "doc/release_notes/5.25.0.txt".freeze, "doc/release_notes/5.26.0.txt".freeze, "doc/release_notes/5.27.0.txt".freeze, "doc/release_notes/5.28.0.txt".freeze, "doc/release_notes/5.29.0.txt".freeze, "doc/release_notes/5.3.0.txt".freeze, "doc/release_notes/5.30.0.txt".freeze, "doc/release_notes/5.31.0.txt".freeze, "doc/release_notes/5.32.0.txt".freeze, "doc/release_notes/5.33.0.txt".freeze, "doc/release_notes/5.34.0.txt".freeze, "doc/release_notes/5.35.0.txt".freeze, "doc/release_notes/5.36.0.txt".freeze, "doc/release_notes/5.37.0.txt".freeze, "doc/release_notes/5.38.0.txt".freeze, "doc/release_notes/5.39.0.txt".freeze, "doc/release_notes/5.4.0.txt".freeze, "doc/release_notes/5.40.0.txt".freeze, "doc/release_notes/5.41.0.txt".freeze, "doc/release_notes/5.42.0.txt".freeze, "doc/release_notes/5.43.0.txt".freeze, "doc/release_notes/5.44.0.txt".freeze, "doc/release_notes/5.45.0.txt".freeze, "doc/release_notes/5.46.0.txt".freeze, "doc/release_notes/5.47.0.txt".freeze, "doc/release_notes/5.48.0.txt".freeze, "doc/release_notes/5.49.0.txt".freeze, "doc/release_notes/5.5.0.txt".freeze, "doc/release_notes/5.50.0.txt".freeze, "doc/release_notes/5.51.0.txt".freeze, "doc/release_notes/5.52.0.txt".freeze, "doc/release_notes/5.53.0.txt".freeze, "doc/release_notes/5.6.0.txt".freeze, "doc/release_notes/5.7.0.txt".freeze, "doc/release_notes/5.8.0.txt".freeze, "doc/release_notes/5.9.0.txt".freeze] + s.files = ["CHANGELOG".freeze, "MIT-LICENSE".freeze, "README.rdoc".freeze, "bin/sequel".freeze, "doc/advanced_associations.rdoc".freeze, "doc/association_basics.rdoc".freeze, "doc/bin_sequel.rdoc".freeze, "doc/cheat_sheet.rdoc".freeze, "doc/code_order.rdoc".freeze, "doc/core_extensions.rdoc".freeze, "doc/dataset_basics.rdoc".freeze, "doc/dataset_filtering.rdoc".freeze, "doc/extensions.rdoc".freeze, "doc/fork_safety.rdoc".freeze, "doc/mass_assignment.rdoc".freeze, "doc/migration.rdoc".freeze, "doc/model_dataset_method_design.rdoc".freeze, "doc/model_hooks.rdoc".freeze, "doc/model_plugins.rdoc".freeze, "doc/mssql_stored_procedures.rdoc".freeze, "doc/object_model.rdoc".freeze, "doc/opening_databases.rdoc".freeze, "doc/postgresql.rdoc".freeze, "doc/prepared_statements.rdoc".freeze, "doc/querying.rdoc".freeze, "doc/reflection.rdoc".freeze, "doc/release_notes/5.0.0.txt".freeze, "doc/release_notes/5.1.0.txt".freeze, "doc/release_notes/5.10.0.txt".freeze, "doc/release_notes/5.11.0.txt".freeze, "doc/release_notes/5.12.0.txt".freeze, "doc/release_notes/5.13.0.txt".freeze, "doc/release_notes/5.14.0.txt".freeze, "doc/release_notes/5.15.0.txt".freeze, "doc/release_notes/5.16.0.txt".freeze, "doc/release_notes/5.17.0.txt".freeze, "doc/release_notes/5.18.0.txt".freeze, "doc/release_notes/5.19.0.txt".freeze, "doc/release_notes/5.2.0.txt".freeze, "doc/release_notes/5.20.0.txt".freeze, "doc/release_notes/5.21.0.txt".freeze, "doc/release_notes/5.22.0.txt".freeze, "doc/release_notes/5.23.0.txt".freeze, "doc/release_notes/5.24.0.txt".freeze, "doc/release_notes/5.25.0.txt".freeze, "doc/release_notes/5.26.0.txt".freeze, "doc/release_notes/5.27.0.txt".freeze, "doc/release_notes/5.28.0.txt".freeze, "doc/release_notes/5.29.0.txt".freeze, "doc/release_notes/5.3.0.txt".freeze, "doc/release_notes/5.30.0.txt".freeze, "doc/release_notes/5.31.0.txt".freeze, "doc/release_notes/5.32.0.txt".freeze, "doc/release_notes/5.33.0.txt".freeze, "doc/release_notes/5.34.0.txt".freeze, "doc/release_notes/5.35.0.txt".freeze, "doc/release_notes/5.36.0.txt".freeze, "doc/release_notes/5.37.0.txt".freeze, "doc/release_notes/5.38.0.txt".freeze, "doc/release_notes/5.39.0.txt".freeze, "doc/release_notes/5.4.0.txt".freeze, "doc/release_notes/5.40.0.txt".freeze, "doc/release_notes/5.41.0.txt".freeze, "doc/release_notes/5.42.0.txt".freeze, "doc/release_notes/5.43.0.txt".freeze, "doc/release_notes/5.44.0.txt".freeze, "doc/release_notes/5.45.0.txt".freeze, "doc/release_notes/5.46.0.txt".freeze, "doc/release_notes/5.47.0.txt".freeze, "doc/release_notes/5.48.0.txt".freeze, "doc/release_notes/5.49.0.txt".freeze, "doc/release_notes/5.5.0.txt".freeze, "doc/release_notes/5.50.0.txt".freeze, "doc/release_notes/5.51.0.txt".freeze, "doc/release_notes/5.52.0.txt".freeze, "doc/release_notes/5.53.0.txt".freeze, "doc/release_notes/5.6.0.txt".freeze, "doc/release_notes/5.7.0.txt".freeze, "doc/release_notes/5.8.0.txt".freeze, "doc/release_notes/5.9.0.txt".freeze, "doc/schema_modification.rdoc".freeze, "doc/security.rdoc".freeze, "doc/sharding.rdoc".freeze, "doc/sql.rdoc".freeze, "doc/testing.rdoc".freeze, "doc/thread_safety.rdoc".freeze, "doc/transactions.rdoc".freeze, "doc/validations.rdoc".freeze, "doc/virtual_rows.rdoc".freeze] + s.homepage = "http://sequel.jeremyevans.net".freeze + s.licenses = ["MIT".freeze] + s.rdoc_options = ["--quiet".freeze, "--line-numbers".freeze, "--inline-source".freeze, "--title".freeze, "Sequel: The Database Toolkit for Ruby".freeze, "--main".freeze, "README.rdoc".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 1.9.2".freeze) + s.rubygems_version = "3.1.6".freeze + s.summary = "The Database Toolkit for Ruby".freeze + + s.installed_by_version = "3.1.6" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + end + + if s.respond_to? :add_runtime_dependency then + s.add_development_dependency(%q.freeze, [">= 5.7.0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + else + s.add_dependency(%q.freeze, [">= 5.7.0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + s.add_dependency(%q.freeze, [">= 0"]) + end +end diff --git a/tests/packagedcode/data/rubygems/package/m2r-2.1.0.gem.json b/tests/packagedcode/data/rubygems/package/m2r-2.1.0.gem.json index e67a03cd1b6..0266dba0f18 100644 --- a/tests/packagedcode/data/rubygems/package/m2r-2.1.0.gem.json +++ b/tests/packagedcode/data/rubygems/package/m2r-2.1.0.gem.json @@ -56,7 +56,6 @@ "MIT" ], "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:gem/ffi-rzmq", @@ -163,7 +162,6 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [], "purl": "pkg:gem/m2r@2.1.0", "repository_homepage_url": "https://rubygems.org/gems/m2r/versions/2.1.0", diff --git a/tests/packagedcode/test_rubygems.py b/tests/packagedcode/test_rubygems.py index 08e13dfc5d9..0ac0d6dad57 100644 --- a/tests/packagedcode/test_rubygems.py +++ b/tests/packagedcode/test_rubygems.py @@ -11,7 +11,6 @@ import json import os -import saneyaml from commoncode import text from commoncode.testcase import FileBasedTesting @@ -19,65 +18,65 @@ from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES - # TODO: Add test with https://rubygems.org/gems/pbox2d/versions/1.0.3-java # this is a multiple personality package (Java and Ruby) # see also https://rubygems.org/downloads/jaro_winkler-1.5.1-java.gem + class TestGemSpec(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_is_manifest_ruby_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/address_standardization.gemspec') - assert rubygems.GemSpec.is_package_data_file(test_file) + assert rubygems.GemspecHandler.is_datafile(test_file) def test_rubygems_can_parse_gemspec_address_standardization_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/address_standardization.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/address_standardization.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_can_parse_gemspec_arel_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/arel.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/arel.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_cat_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/cat.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/cat.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_github_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/github.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/github.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_mecab_ruby_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/mecab-ruby.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/mecab-ruby.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_oj_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/oj.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/oj.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_rubocop_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/rubocop.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/rubocop.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_rubygems_with_variables_gemspec(self): test_file = self.get_test_loc('rubygems/gemspec/with_variables.gemspec') expected_loc = self.get_test_loc('rubygems/gemspec/with_variables.gemspec.expected.json') - packages = rubygems.GemSpec.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemspecHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) class TestRubyGemMetadata(FileBasedTesting): @@ -85,11 +84,11 @@ class TestRubyGemMetadata(FileBasedTesting): def test_is_manifest_ruby_archive_extracted(self): test_file = self.get_test_loc('rubygems/metadata/metadata.gz-extract') - assert rubygems.GemArchiveExtracted.is_package_data_file(test_file) + assert rubygems.GemMetadataArchiveExtractedHandler.is_datafile(test_file) def test_build_rubygem_package_does_not_crash(self): test_file = self.get_test_loc('rubygems/metadata/metadata.gz-extract') - rubygems.GemArchiveExtracted.recognize(test_file) + rubygems.GemMetadataArchiveExtractedHandler.parse(test_file) def relative_walk(dir_path, extension='.gem'): @@ -110,13 +109,14 @@ def create_test_function(test_loc, test_name, regen=REGEN_TEST_FIXTURES): """ Return a test function closed on test arguments. """ + # closure on the test params def check_rubygem(self): loc = self.get_test_loc(test_loc) expected_json_loc = loc + '.json' - packages = list(rubygems.GemArchive.recognize(location=loc)) + packages = list(rubygems.GemArchiveHandler.parse(location=loc)) package = packages[0] - package.license_expression = package.compute_normalized_license() + package.license_expression = rubygems.GemArchiveHandler.compute_normalized_license(package) package = [package.to_dict()] if regen: with io.open(expected_json_loc, 'w') as ex: @@ -159,14 +159,18 @@ class TestGemfileLock(PackageTester): def test_is_manifest_ruby_gemfilelock(self): test_file = self.get_test_loc('rubygems/gemfile-lock/Gemfile.lock') - assert rubygems.GemfileLock.is_package_data_file(test_file) + assert rubygems.GemfileLockHandler.is_datafile(test_file) def test_ruby_gemfile_lock_as_dict(self): test_file = self.get_test_loc('rubygems/gemfile-lock/Gemfile.lock') expected_loc = self.get_test_loc('rubygems/gemfile-lock/Gemfile.lock.expected') - packages = rubygems.GemfileLock.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = rubygems.GemfileLockHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) -build_tests(test_dir='rubygems/gem', clazz=TestRubyGemsDataDriven, - prefix='test_get_gem_package_', regen=REGEN_TEST_FIXTURES) +build_tests( + test_dir='rubygems/gem', + clazz=TestRubyGemsDataDriven, + prefix='test_get_gem_package_', + regen=REGEN_TEST_FIXTURES +) From 494b87df1ada7fe65cc75835e66cf0e64e345cfc Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:16:54 +0200 Subject: [PATCH 25/36] Adopt new handler design for npm packages We now have these data file handlers: * NpmPackageJsonHandler * NpmPackageLockJsonHandler * NpmShrinkwrapJsonHandler * YarnLockV2Handler * YarnLockV1Handler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/npm.py | 940 +- .../npm/as_installed/package.json.expected | 7 +- .../authors_list_dicts/package.json.expected | 7 +- .../package.json.expected | 7 +- .../package.json.expected | 7 +- .../data/npm/basic/package.json.expected | 7 +- .../npm/bundledDeps/package.json.expected | 7 +- .../data/npm/casepath/package.json.expected | 7 +- .../data/npm/chartist/package.json.expected | 7 +- .../data/npm/dist/package.json.expected | 7 +- .../npm/double_license/package.json.expected | 7 +- .../express-jwt-3.4.0/package.json.expected | 7 +- .../data/npm/from_npmjs/package.json.expected | 7 +- .../npm/from_tarball/package.json.expected | 7 +- .../get_package_resources.scan.expected.json | 144 + .../homepage-as-list/package.json.expected | 7 +- .../npm/invalid-dep/package.json.expected | 7 +- .../data/npm/keywords/package.json.expected | 7 +- .../legacy_license_dict/package.json.expected | 7 +- .../data/npm/mime-1.3.4/package.json.expected | 7 +- .../data/npm/nodep/package.json.expected | 7 +- .../npm-shrinkwrap.json-expected | 40835 +++++++++------- .../npm/old_registry/package.json.expected | 7 +- .../npm/package-lock-v1/package-lock.json | 70 + .../package-lock.json-expected | 528 + .../npm/package-lock-v2-2/package-lock.json | 132 + .../package-lock.json-expected | 706 + .../npm/package-lock-v2/package-lock.json | 53 + .../package-lock.json-expected | 365 + .../data/npm/package-lock/package-lock.json | 232 - .../package-lock/package-lock.json-expected | 1564 - .../data/npm/repo_url/package.json.expected | 7 +- .../data/npm/scan-nested/scan.expected.json | 1619 + .../node_modules/sequelize/package-lock.json | 20 + .../scan/node_modules/sequelize/package.json | 60 + .../scan/node_modules/sequelize/yarn.lock | 21 + .../npm/scan-nested/scan/package-lock.json | 25 + .../data/npm/scan-nested/scan/package.json | 20 + .../data/npm/scoped1/package.json.expected | 7 +- .../data/npm/scoped2/package.json.expected | 7 +- .../data/npm/sequelize/package.json.expected | 7 +- .../data/npm/uri_vcs/package.json.expected | 7 +- .../data/npm/urls_dict/package.json.expected | 7 +- .../utils-merge-1.0.0/package.json.expected | 7 +- .../data/npm/with_name/package.json.expected | 7 +- .../data/npm/yarn-lock/v1-complex/yarn.lock | 27 + .../yarn-lock/v1-complex/yarn.lock-expected | 228 + .../data/npm/yarn-lock/v1/yarn.lock | 50 + .../data/npm/yarn-lock/v1/yarn.lock-expected | 478 + .../data/npm/yarn-lock/v2-local/yarn.lock | 11 + .../{ => v2-local}/yarn.lock-expected | 462 - .../data/npm/yarn-lock/v2/yarn.lock | 31 + .../data/npm/yarn-lock/v2/yarn.lock-expected | 57 + .../packagedcode/data/npm/yarn-lock/yarn.lock | 2891 -- tests/packagedcode/test_npm.py | 234 +- 55 files changed, 28042 insertions(+), 23957 deletions(-) create mode 100644 tests/packagedcode/data/npm/get_package_resources.scan.expected.json create mode 100644 tests/packagedcode/data/npm/package-lock-v1/package-lock.json create mode 100644 tests/packagedcode/data/npm/package-lock-v1/package-lock.json-expected create mode 100644 tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json create mode 100644 tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json-expected create mode 100644 tests/packagedcode/data/npm/package-lock-v2/package-lock.json create mode 100644 tests/packagedcode/data/npm/package-lock-v2/package-lock.json-expected delete mode 100644 tests/packagedcode/data/npm/package-lock/package-lock.json delete mode 100644 tests/packagedcode/data/npm/package-lock/package-lock.json-expected create mode 100644 tests/packagedcode/data/npm/scan-nested/scan.expected.json create mode 100644 tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package-lock.json create mode 100644 tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package.json create mode 100644 tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/yarn.lock create mode 100644 tests/packagedcode/data/npm/scan-nested/scan/package-lock.json create mode 100644 tests/packagedcode/data/npm/scan-nested/scan/package.json create mode 100644 tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock create mode 100644 tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock-expected create mode 100644 tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock create mode 100644 tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock-expected create mode 100644 tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock rename tests/packagedcode/data/npm/yarn-lock/{ => v2-local}/yarn.lock-expected (98%) create mode 100644 tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock create mode 100644 tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock-expected delete mode 100644 tests/packagedcode/data/npm/yarn-lock/yarn.lock diff --git a/src/packagedcode/npm.py b/src/packagedcode/npm.py index 31632aa15fa..739af32a925 100644 --- a/src/packagedcode/npm.py +++ b/src/packagedcode/npm.py @@ -7,21 +7,19 @@ # See https://aboutcode.org for more information about nexB OSS projects. # import base64 -from collections import defaultdict -from functools import partial import io import json -import logging import re +import urllib.parse +from functools import partial +from itertools import islice -import attr from packageurl import PackageURL -from commoncode import filetype -from commoncode import fileutils from packagedcode import models from packagedcode.utils import combine_expressions from packagedcode.utils import normalize_vcs_url +import saneyaml """ Handle Node.js npm packages @@ -32,101 +30,112 @@ To check https://github.com/npm/normalize-package-data """ -TRACE = False - -logger = logging.getLogger(__name__) - - -def logger_debug(*args): - pass - - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return print(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - # TODO: add os and engines from package.json?? -# add lock files and yarn details +# TODO: add new yarn v2 lock file format +# TODO: add pnp.js and pnpm-lock.yaml https://pnpm.io/ +# TODO: add support for "lockfileVersion": 2 for package-lock.json and lockfileVersion: 3 -@attr.s() -class NpmPackageData(models.PackageData): - # TODO: add new lock files and yarn lock files - mimetypes = ('application/x-tar',) - default_type = 'npm' - default_primary_language = 'JavaScript' - default_web_baseurl = 'https://www.npmjs.com/package' - default_download_baseurl = 'https://registry.npmjs.org' - default_api_baseurl = 'https://registry.npmjs.org' - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) +class BaseNpmHandler(models.DatafileHandler): @classmethod - def ignore_resource(cls, resource, codebase): - return resource.is_dir and resource.name == 'node_modules' - - def repository_homepage_url(self, baseurl=default_web_baseurl): - return npm_homepage_url(self.namespace, self.name, registry=baseurl) + def assemble(cls, package_data, resource, codebase): + datafile_name_patterns = ( + 'package.json', + 'package-lock.json', + '.package-lock.json', + 'npm-shrinkwrap.json', + 'yarn.lock', + ) - def repository_download_url(self, baseurl=default_download_baseurl): - return npm_download_url(self.namespace, self.name, self.version, registry=baseurl) + if resource.has_parent(): + dir_resource=resource.parent(codebase) + else: + dir_resource=resource - def api_data_url(self, baseurl=default_api_baseurl): - return npm_api_url(self.namespace, self.name, self.version, registry=baseurl) + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=dir_resource, + codebase=codebase, + ) - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) + @classmethod + def walk_npm(cls, resource, codebase, depth=0): + """ + Walk the ``codebase`` Codebase top-down, breadth-first starting from the + ``resource`` Resource. + Skip a first level child directory named "node_modules": this avoids + reporting nested vendored packages as being part of their parent. + Instead they will be reported on their own. + """ + for child in resource.children(codebase): + if depth == 0 and child.name == 'node_modules': + continue -@attr.s() -class PackageJson(NpmPackageData, models.PackageDataFile): + yield child - file_patterns = ('package.json',) - extensions = ('.tgz',) + if child.is_dir: + depth += 1 + for subchild in cls.walk_skip(child, codebase, depth=depth): + yield subchild + # TODO: this MUST BE USED @classmethod - def is_package_data_file(cls, location): + def assign_package_to_resources(cls, package, resource, codebase): """ - Return True if the file at ``location`` is likely a manifest of this type. + Yield the Resources of an npm Package, ignoring nested mode_modules. """ - return filetype.is_file(location) and fileutils.file_name(location).lower() == 'package.json' + root = resource.parent(codebase) + if root: + yield from cls.walk_npm(resource=root, codebase=codebase) + + +def get_urls(namespace, name, version): + return dict( + repository_homepage_url=npm_homepage_url(namespace, name, registry='https://www.npmjs.com/package'), + repository_download_url=npm_download_url(namespace, name, version, registry='https://registry.npmjs.org'), + api_data_url=npm_api_url(namespace, name, version, registry='https://registry.npmjs.org'), + ) + + +class NpmPackageJsonHandler(BaseNpmHandler): + datasource_id = 'npm_package_json' + path_patterns = ('*/package.json',) + default_package_type = 'npm' + default_primary_language = 'JavaScript' + description = 'npm package.json' + documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/package-json' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with io.open(location, encoding='utf-8') as loc: package_data = json.load(loc) - + name = package_data.get('name') version = package_data.get('version') - homepage = package_data.get('homepage', '') + homepage_url = package_data.get('homepage', '') - if not name: - # a package.json without name and version is not a usable npm package - # FIXME: raise error? - return + # a package.json without name and version can be a private package + + if homepage_url and isinstance(homepage_url, list): + # TODO: should we keep other URLs + homepage_url = homepage_url[0] + homepage_url = homepage_url.strip() or None - if isinstance(homepage, list): - if homepage: - homepage = homepage[0] - else: - homepage = '' namespace, name = split_scoped_package_name(name) - package = cls( + + urls = get_urls(namespace, name, version) + package = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, namespace=namespace or None, name=name, version=version or None, description=package_data.get('description', '').strip() or None, - homepage_url=homepage.strip() or None, + homepage_url=homepage_url, + **urls, ) vcs_revision = package_data.get('gitHead') or None @@ -150,7 +159,6 @@ def recognize(cls, location): ] for source, func in field_mappers: - if TRACE: logger.debug('parse: %(source)r, %(func)r' % locals()) value = package_data.get(source) or None if value: if isinstance(value, str): @@ -167,319 +175,484 @@ def recognize(cls, location): lic = package_data.get('license') lics = package_data.get('licenses') package = licenses_mapper(lic, lics, package) - if TRACE: - declared_license = package.declared_license - logger.debug( - 'parse: license: {lic} licenses: {lics} ' - 'declared_license: {declared_license}'.format(locals())) - - yield package + if not package.license_expression and package.declared_license: + package.license_expression = compute_normalized_license(package.declared_license) -@attr.s() -class PackageLockJson(NpmPackageData, models.PackageDataFile): + yield package - file_patterns = ( - 'npm-shrinkwrap.json', - 'package-lock.json', - ) - extensions = ('.tgz',) + @classmethod + def compute_normalized_license(cls, package): + return compute_normalized_license(package.declared_license) - @staticmethod - def is_package_lock(location): - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == 'package-lock.json') - @staticmethod - def is_npm_shrinkwrap(location): - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == 'npm-shrinkwrap.json') +class BaseNpmLockHandler(BaseNpmHandler): @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return cls.is_package_lock(location) or cls.is_npm_shrinkwrap(location) + def parse(cls, location): - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ with io.open(location, encoding='utf-8') as loc: package_data = json.load(loc) - packages = [] - dev_packages = [] - for dependency, values in package_data.get('dependencies', {}).items(): - is_dev = values.get('dev', False) - dep_deps = [] - namespace = None - name = dependency - if '/' in dependency: - namespace, _slash, name = dependency.partition('/') - # Handle the case where an entry in `dependencies` from a - # package-lock.json file has `requires` - for dep, dep_req in values.get('requires', {}).items(): - purl = PackageURL(type='npm', name=dep, version=dep_req).to_string() - if is_dev: - dep_deps.append( - models.DependentPackage( - purl=purl, - scope='requires-dev', - extracted_requirement=dep_req, - is_runtime=False, - is_optional=True, - is_resolved=True, - ) - ) + # we have two formats: v1 and v2 + lockfile_version = package_data.get('lockfileVersion', 1) + root_name = package_data.get('name') + root_version = package_data.get('version') + root_ns, _ , root_name = root_name.rpartition('/') + + extra_data = dict(lockfile_version=lockfile_version) + # this is the top level element that we return + root_package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + namespace=root_ns, + name=root_name, + version=root_version, + extra_data=extra_data, + **get_urls(root_ns, root_name, root_version) + ) + + # https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json#lockfileversion + if lockfile_version == 1: + deps_key = 'dependencies' + else: + # v2 and may be v3??? + deps_key = 'packages' + + deps_mapping = package_data.get(deps_key) or {} + + dependencies = [] + + for dep, dep_data in deps_mapping.items(): + is_dev = dep_data.get('dev', False) + is_optional = dep_data.get('optional', False) + is_devoptional = dep_data.get('devOptional', False) + if is_dev or is_devoptional: + is_runtime = False + is_optional = True + scope = 'devDependencies' + else: + is_runtime = True + is_optional = is_optional + scope = 'dependencies' + + if not dep: + # in v2 format the first dep is the same as the top level + # package and has no name + pass + + # only present for first top level + # otherwise get name from dep + name = dep_data.get('name') + if not name: + if 'node_modules/' in dep: + # the name is the last segment as the dep can be: + # "node_modules/ansi-align/node_modules/ansi-regex" + _, _, name = dep.rpartition('node_modules/') else: - dep_deps.append( - models.DependentPackage( - purl=purl, - scope='requires', - extracted_requirement=dep_req, - is_runtime=True, - is_optional=False, - is_resolved=True, - ) - ) + name = dep + ns, _ , name = name.rpartition('/') + version = dep_data.get('version') + + dep_purl = PackageURL( + type=cls.default_package_type, + namespace=ns, + name=name, + version=version, + ).to_string() + + dependency = models.DependentPackage( + purl=dep_purl, + extracted_requirement=version, + scope=scope, + is_runtime=is_runtime, + is_optional=is_optional, + is_resolved=True, + ) + + # only seen in v2 for the top level package... but good to keep + declared_license = dep_data.get('license') + + # URLs and checksums + misc = get_urls(ns, name, version) + resolved = dep_data.get('resolved') + misc.update(get_checksum_and_url(resolved).items()) + integrity = dep_data.get('integrity') + misc.update(get_algo_hexsum(integrity).items()) + + resolved_package = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + namespace=ns, + name=name, + version=version, + declared_license=declared_license, + **misc, + ) + # these are paths t the root of the installed package in v2 + if dep: + resolved_package.file_references = [models.FileReference(path=dep)], + + # v1 as name/constraint pairs + subrequires = dep_data.get('requires') or {} + + # in v1 these are further nested dependencies + # in v2 these are name/constraint pairs like v1 requires + subdependencies = dep_data.get('dependencies') + + # v2? ignored for now + dev_subdependencies = dep_data.get('devDependencies') + optional_subdependencies = dep_data.get('optionalDependencies') + engines = dep_data.get('engines') + funding = dep_data.get('funding') - # Handle the case where an entry in `dependencies` from a - # npm-shrinkwrap.json file has `dependencies` - for dep, dep_values in values.get('dependencies', {}).items(): - dep_version = dep_values.get('version') - requirement = None - split_requirement = dep_values.get('from', '').rsplit('@') - if len(split_requirement) == 2: - # requirement is in the form of "abbrev@>=1.0.0 <2.0.0", so we just want what is right of @ - _, requirement = split_requirement - dep_deps.append( + if lockfile_version == 1: + subdeps_data = subrequires + else: + subdeps_data = subdependencies + subdeps_data = subdeps_data or {} + + sub_deps = [] + for subdep, subdep_req in subdeps_data.items(): + sdns, _ , sdname = subdep.rpartition('/') + sdpurl = PackageURL( + type=cls.default_package_type, + namespace=sdns, + name=sdname + ).to_string() + sub_deps.append( models.DependentPackage( - purl=PackageURL( - type='npm', - name=dep, - version=dep_version, - ).to_string(), - scope='dependencies', - extracted_requirement=requirement, - is_runtime=True, - is_optional=False, - is_resolved=True, + purl=sdpurl, + scope=scope, + extracted_requirement=subdep_req, + is_runtime=is_runtime, + is_optional=is_optional, + is_resolved=False, ) ) + resolved_package.dependencies = sub_deps + dependency.resolved_package = resolved_package.to_dict() + dependencies.append(dependency) + + root_package_data.dependencies = dependencies + + yield root_package_data + + +class NpmPackageLockJsonHandler(BaseNpmLockHandler): + # Note that there are multiple lockfileVersion 1 and 2 (and even 3) + # and each have a different layout + datasource_id = 'npm_package_lock_json' + path_patterns = ( + '*/package-lock.json', + '*/.package-lock.json', + ) + default_package_type = 'npm' + default_primary_language = 'JavaScript' + description = 'npm package-lock.json lockfile' + documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json' + + +class NpmShrinkwrapJsonHandler(BaseNpmLockHandler): + datasource_id = 'npm_shrinkwrap_json' + path_patterns = ('*/npm-shrinkwrap.json',) + default_package_type = 'npm' + default_primary_language = 'JavaScript' + description = 'npm shrinkwrap.json lockfile' + documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/npm-shrinkwrap-json' + + +class UnknownYarnLockFormat(Exception): + pass + - p = cls( - namespace=namespace, +def is_yarn_v2(location): + """ + Return True if this is a yarn.lock format version 2 and False if this is + version 1. Raise an UnknownYarnLockFormat exception if neither v1 or v2. + + v1 is a custom, almost-like-YAMl format. v2 is a proper subset of YAML. + + The start of v1 file has this: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + The start of v2 file has this: + # This file is generated by running "yarn install" inside your project. + # Manual changes might be lost - proceed with caution! + + __metadata: + """ + with open(location) as ylf: + # check only in the first 10 lines + for line in islice(ylf, 0, 10): + if '__metadata:' in line: + return True + if 'yarn lockfile v1' in line: + return False + + raise UnknownYarnLockFormat(location) + + +class YarnLockV2Handler(BaseNpmHandler): + """ + Handle yarn.lock v2 format, which is YAML + """ + datasource_id = 'yarn_lock_v2' + path_patterns = ('*/yarn.lock',) + default_package_type = 'npm' + default_primary_language = 'JavaScript' + description = 'yarn.lock lockfile v2 format' + documentation_url = 'https://classic.yarnpkg.com/lang/en/docs/yarn-lock/' + + @classmethod + def is_datafile(cls, location, filetypes=tuple()): + return super().is_datafile(location, filetypes=filetypes) and is_yarn_v2(location) + + @classmethod + def parse(cls, location): + """ + Parse a bew yarn.lock v2 YAML format which looks like this: + + "@algolia/cache-browser-local-storage@npm:4.2.0": + version: 4.2.0 + resolution: "@algolia/cache-browser-local-storage@npm:4.2.0" + dependencies: + "@algolia/cache-common": 4.2.0 + checksum: 72ac158925eb5a51e015aa22df5d2026fc0c0b6b58eb8c1290712e0 + languageName: node + linkType: hard + + Yield a single PackageData + """ + with open(location) as yl: + lock_data = saneyaml.load(yl.read()) + top_dependencies = [] + + for spec, details in lock_data.items(): + if spec == '__metadata': + continue + version = details.get('version') + resolution = details.get('resolution') + ns_name, _, version = resolution.rpartition('@') + ns, _, name = ns_name.rpartition('/') + if version.startswith('npm:'): + _npm, _, version = version.partition(':') + purl = PackageURL( + type=cls.default_package_type, + namespace=ns, name=name, - version=values.get('version'), - download_url=values.get('resolved'), - dependencies=dep_deps, + version=version, ) - if is_dev: - dev_packages.append(p) - else: - packages.append(p) - package_deps = [] - for package in packages: - package_deps.append( - models.DependentPackage( - purl=package.purl, + # TODO: add resolved_package with its own deps + checksum = details.get('checksum') + dependencies = details.get('dependencies') or {} + peer_dependencies = details.get('peerDependencies') or {} + dependencies_meta = details.get('dependenciesMeta') or {} + # these are file references + bin = details.get('bin') or [] + + dependency = models.DependentPackage( + purl=str(purl), + extracted_requirement=version, + is_resolved=True, + # FIXME: these are NOT correct scope='dependencies', - is_runtime=True, + # TODO: get details from metadata is_optional=False, - is_resolved=True, + is_runtime=True, ) - ) + top_dependencies.append(dependency) - dev_package_deps = [] - for dev_package in dev_packages: - dev_package_deps.append( - models.DependentPackage( - purl=dev_package.purl, - scope='dependencies-dev', - is_runtime=False, - is_optional=True, - is_resolved=True, - ) - ) - - yield cls( - name=package_data.get('name'), - version=package_data.get('version'), - dependencies=package_deps + dev_package_deps, + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=top_dependencies, ) - for package in packages + dev_packages: - yield package - - -@attr.s() -class YarnLockJson(NpmPackageData, models.PackageDataFile): - file_patterns = ('yarn.lock',) - extensions = ('.tgz',) +class YarnLockV1Handler(BaseNpmHandler): + """ + Handle yarn.lock v1 format, which is more or less but not quite like YAML + """ + datasource_id = 'yarn_lock_v1' + path_patterns = ('*/yarn.lock',) + default_package_type = 'npm' + default_primary_language = 'JavaScript' + description = 'yarn.lock lockfile v1 format' + documentation_url = 'https://classic.yarnpkg.com/lang/en/docs/yarn-lock/' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower() == 'yarn.lock') + def is_datafile(cls, location, filetypes=tuple()): + return super().is_datafile(location, filetypes=filetypes) and not is_yarn_v2(location) @classmethod - def recognize(cls, location): + def parse(cls, location): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Parse a classic yarn.lock format which looks like this: + "@babel/core@^7.1.0", "@babel/core@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + + Yield a single PackageData """ - with io.open(location, encoding='utf-8') as yarn_lock_lines: - - packages = [] - packages_reqs = [] - current_package_data = {} - dependencies = False - for line in yarn_lock_lines: - # Check if this is not an empty line or comment - if line.strip() and not line.startswith('#'): - if line.startswith(' '): - if not dependencies: - if line.strip().startswith('version'): - current_package_data['version'] = line.partition('version')[2].strip().strip('\"') - elif line.strip().startswith('resolved'): - current_package_data['download_url'] = line.partition('resolved')[2].strip().strip('\"') - elif line.strip().startswith('dependencies'): - dependencies = True - else: - continue - else: - split_line = line.strip().split() - if len(split_line) == 2: - k, v = split_line - # Remove leading and following quotation marks on values - v = v[1:-1] - if 'dependencies' in current_package_data: - current_package_data['dependencies'].append((k, v)) - else: - current_package_data['dependencies'] = [(k, v)] - else: - dependencies = False - # Clean up dependency name and requirement strings - line = line.strip().replace('\"', '').replace(':', '') - split_line_for_name_req = line.split(',') - dep_names_and_reqs = defaultdict(list) - for segment in split_line_for_name_req: - segment = segment.strip() - dep_name_and_req = segment.rsplit('@', 1) - dep, req = dep_name_and_req - dep_names_and_reqs[dep].append(req) - # We should only have one key `dep_names_and_reqs`, where it is the - # current dependency we are looking at - if len(dep_names_and_reqs.keys()) == 1: - dep, req = list(dep_names_and_reqs.items())[0] - if '@' in dep and '/' in dep: - namespace, name = dep.split('/') - current_package_data['namespace'] = namespace - current_package_data['name'] = name - else: - current_package_data['name'] = dep - current_package_data['requirement'] = ', '.join(req) + with io.open(location, encoding='utf-8') as yl: + yl_dependencies = yl.read().split('\n\n') + + dependencies = [] + for yl_dependency in yl_dependencies: + lines = yl_dependency.splitlines(False) + if all(l.startswith('#') or not l.strip() for l in lines): + # header or empty blocks are all comments or empties + continue + + top_requirements = [] + dependency_data = {} + sub_dependencies = [] + + for line in lines: + stripped = line.strip() + comment = line.startswith('#') + if not stripped or comment: + continue + + if line.startswith(' ' * 4): + # "@babel/code-frame" "^7.0.0" + # hosted-git-info "^2.1.4" + # semver "2 || 3 || 4 || 5" + ns_name, _, constraint = stripped.partition(' ') + ns, _ , name = ns_name.rpartition('/') + sub_dependencies.append((ns, name, constraint,)) + + elif line.startswith(' ' * 2) : + # version "7.3.4" + # resolved "https://registry.yarnpkg.com/@babel...." + # integrity sha512-jRsuseXBo9 + key, _, value = stripped.partition(' ') + value = value.strip().strip("\"'") + key = key.strip() + if key != 'dependencies': + dependency_data[key] = value + + elif not line.startswith(' ') and stripped.endswith(':'): + # the first line of a dependency has the name and requirements + # "@babel/core@^7.1.0", "@babel/core@^7.3.4": + requirements = stripped.strip(':').split(', ') + requirements = [r.strip().strip("\"'") for r in requirements] + for req in requirements: + if req.startswith('@'): + assert req.count('@') == 2 + + ns_name, _, constraint = req.rpartition('@') + ns, _ , name = ns_name.rpartition('/') + constraint = constraint.strip("\"'") + top_requirements.append((ns, name, constraint,)) + else: - deps = [] - if current_package_data: - for dep, req in current_package_data.get('dependencies', []): - deps.append( - models.DependentPackage( - purl=PackageURL(type='npm', name=dep).to_string(), - scope='dependencies', - extracted_requirement=req, - is_runtime=True, - is_optional=False, - is_resolved=True, - ) - ) - packages.append( - cls( - namespace=current_package_data.get('namespace'), - name=current_package_data.get('name'), - version=current_package_data.get('version'), - download_url=current_package_data.get('download_url'), - dependencies=deps - ) - ) - packages_reqs.append(current_package_data.get('requirement')) - current_package_data = {} - - # Add the last element if it's not already added - if current_package_data: - for dep, req in current_package_data.get('dependencies', []): - deps.append( - models.DependentPackage( - purl=PackageURL(type='npm', name=dep).to_string(), - scope='dependencies', - extracted_requirement=req, - is_runtime=True, - is_optional=False, - is_resolved=True, - ) - ) - packages.append( - cls( - namespace=current_package_data.get('namespace'), - name=current_package_data.get('name'), - version=current_package_data.get('version'), - download_url=current_package_data.get('download_url'), - dependencies=deps - ) - ) - packages_reqs.append(current_package_data.get('requirement')) + raise Exception('Inconsistent content') + + # top_requirements should be all for the same package + ns_names = set([(ns, name) for ns, name, _constraint in top_requirements]) + assert len(ns_names) == 1, f'Different names for same dependency is not supported: {ns_names!r}' + ns, name = ns_names.pop() + version = dependency_data.get('version') + extracted_requirement = ' '.join(constraint for _ns, _name, constraint in top_requirements) + + misc = get_urls(ns, name, version) + resolved = dependency_data.get('resolved') + misc.update(get_checksum_and_url(resolved).items()) + integrity = dependency_data.get('integrity') + misc.update(get_algo_hexsum(integrity).items()) + + # we create a resolve package with the details + resolved_package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + namespace=ns, + name=name, + version=version, + primary_language=cls.default_primary_language, + **misc, + ) - packages_dependencies = [] - for package, requirement in zip(packages, packages_reqs): - packages_dependencies.append( - models.DependentPackage( - purl=PackageURL( - type='npm', - name=package.name, - version=package.version - ).to_string(), - extracted_requirement=requirement, - scope='dependencies', - is_runtime=True, - is_optional=False, - is_resolved=True, - ) + # we add the sub-deps to the resolved package + for subns, subname, subconstraint in sub_dependencies: + subpurl = PackageURL(type=cls.default_package_type, namespace=subns, name=subname) + subconstraint = subconstraint.strip("\"'") + subdep = models.DependentPackage( + purl=str(subpurl), + extracted_requirement=subconstraint, + # FIXME: these are NOT correct + scope='dependencies', + is_optional=False, + is_runtime=True, ) + resolved_package_data.dependencies.append(subdep) + + # we create a purl with a version, since we are resolved + dep_purl = PackageURL( + type=cls.default_package_type, + namespace=ns, + name=name, + version=version, + ) + + dep = models.DependentPackage( + purl=str(dep_purl), + extracted_requirement=extracted_requirement, + is_resolved=True, + # FIXME: these are NOT correct + scope='dependencies', + is_optional=False, + is_runtime=True, + resolved_package=resolved_package_data.to_dict(), + ) + dependencies.append(dep) - yield cls(dependencies=packages_dependencies) - for package in packages: - yield package + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies, + ) -@attr.s() -class NpmPackage(NpmPackageData, models.Package): +def get_checksum_and_url(url): """ - A NPM Package that is created out of one/multiple npm package - manifests, lockfiles, build scripts and package-like data, with it's files. + Return a mapping of {download_url, sha1} where the checksum can be a + fragment for a sha1. """ + if not url: + return {} - @property - def ignore_paths(self): - return [ - "node_modules" - ] + url, checksum = urllib.parse.urldefrag(url) + sha1_hex_len = 40 + if checksum and len(checksum) == sha1_hex_len: + return dict(download_url=url, sha1=checksum) + else: + return dict(download_url=url) - @property - def manifests(self): - return [ - PackageJson, - PackageLockJson, - YarnLockJson - ] + +def get_algo_hexsum(checksum): + """ + Return a mapping of {alogo: checksum in hex} given a prefixed checksum from + an npm manifest. + """ + if not checksum or '-' not in checksum: + return {} + + algo, _, checksum = checksum.partition('-') + # value is base64 encoded: we convert to hex + checksum = base64.b64decode(checksum.encode('ascii')).hex() + return {algo: checksum} def compute_normalized_license(declared_license): @@ -536,19 +709,26 @@ def npm_homepage_url(namespace, name, registry='https://www.npmjs.com/package'): version and a base registry web interface URL. For example: - >>> assert npm_homepage_url('@invisionag', 'eslint-config-ivx') == 'https://www.npmjs.com/package/@invisionag/eslint-config-ivx' - >>> assert npm_homepage_url(None, 'angular') == 'https://www.npmjs.com/package/angular' - >>> assert npm_homepage_url('', 'angular') == 'https://www.npmjs.com/package/angular' - >>> assert npm_homepage_url('', 'angular', 'https://yarnpkg.com/en/package/') == 'https://yarnpkg.com/en/package/angular' - >>> assert npm_homepage_url('@ang', 'angular', 'https://yarnpkg.com/en/package') == 'https://yarnpkg.com/en/package/@ang/angular' - """ - registry = registry.rstrip('/') + >>> expected = 'https://www.npmjs.com/package/@invisionag/eslint-config-ivx' + >>> assert npm_homepage_url('@invisionag', 'eslint-config-ivx') == expected + >>> expected = 'https://www.npmjs.com/package/angular' + >>> assert npm_homepage_url(None, 'angular') == expected + + >>> expected = 'https://www.npmjs.com/package/angular' + >>> assert npm_homepage_url('', 'angular') == expected + + >>> expected = 'https://yarnpkg.com/en/package/angular' + >>> assert npm_homepage_url('', 'angular', 'https://yarnpkg.com/en/package') == expected + + >>> expected = 'https://yarnpkg.com/en/package/@ang/angular' + >>> assert npm_homepage_url('@ang', 'angular', 'https://yarnpkg.com/en/package') == expected + """ if namespace: - ns_name = '/'.join([namespace, name]) + ns_name = f'{namespace}/{name}' else: ns_name = name - return '%(registry)s/%(ns_name)s' % locals() + return f'{registry}/{ns_name}' def npm_download_url(namespace, name, version, registry='https://registry.npmjs.org'): @@ -557,16 +737,21 @@ def npm_download_url(namespace, name, version, registry='https://registry.npmjs. and a base registry URL. For example: - >>> assert npm_download_url('@invisionag', 'eslint-config-ivx', '0.1.4') == 'https://registry.npmjs.org/@invisionag/eslint-config-ivx/-/eslint-config-ivx-0.1.4.tgz' - >>> assert npm_download_url('', 'angular', '1.6.6') == 'https://registry.npmjs.org/angular/-/angular-1.6.6.tgz' - >>> assert npm_download_url(None, 'angular', '1.6.6') == 'https://registry.npmjs.org/angular/-/angular-1.6.6.tgz' + >>> expected = 'https://registry.npmjs.org/@invisionag/eslint-config-ivx/-/eslint-config-ivx-0.1.4.tgz' + >>> assert npm_download_url('@invisionag', 'eslint-config-ivx', '0.1.4') == expected + + >>> expected = 'https://registry.npmjs.org/angular/-/angular-1.6.6.tgz' + >>> assert npm_download_url('', 'angular', '1.6.6') == expected + + >>> expected = 'https://registry.npmjs.org/angular/-/angular-1.6.6.tgz' + >>> assert npm_download_url(None, 'angular', '1.6.6') == expected """ - registry = registry.rstrip('/') if namespace: - ns_name = '/'.join([namespace, name]) + ns_name = f'{namespace}/{name}' + else: ns_name = name - return '{registry}/{ns_name}/-/{name}-{version}.tgz'.format(**locals()) + return f'{registry}/{ns_name}/-/{name}-{version}.tgz' def npm_api_url(namespace, name, version=None, registry='https://registry.npmjs.org'): @@ -580,15 +765,15 @@ def npm_api_url(namespace, name, version=None, registry='https://registry.npmjs. applied for scoped npms. For example: - >>> x = npm_api_url( - ... '@invisionag', 'eslint-config-ivx', '0.1.4', - ... 'https://registry.yarnpkg.com') - >>> assert x == 'https://registry.yarnpkg.com/@invisionag%2feslint-config-ivx' + >>> result = npm_api_url('@invisionag', 'eslint-config-ivx', '0.1.4', 'https://registry.yarnpkg.com') + >>> assert result == 'https://registry.yarnpkg.com/@invisionag%2feslint-config-ivx' + >>> assert npm_api_url(None, 'angular', '1.6.6') == 'https://registry.npmjs.org/angular/1.6.6' """ - registry = registry.rstrip('/') version = version or '' if namespace: + # this is a legacy wart: older registries used to always encode this / + # FIXME: do NOT encode and use plain / instead ns_name = '%2f'.join([namespace, name]) # there is no version-specific URL for scoped packages version = '' @@ -596,8 +781,8 @@ def npm_api_url(namespace, name, version=None, registry='https://registry.npmjs. ns_name = name if version: - version = '/' + version - return '{registry}/{ns_name}{version}'.format(**locals()) + version = f'/{version}' + return f'{registry}/{ns_name}{version}' def is_scoped_package(name): @@ -648,6 +833,7 @@ def split_scoped_package_name(name): if not name: return None, None + # FIXME: this legacy percent encoding/decoding should no longer be needed name = name.replace('%40', '@').replace('%2f', '/').replace('%2F', '/') name = name.rstrip('@').strip('/').strip() if not name: @@ -826,22 +1012,12 @@ def dist_mapper(dist, package): if not isinstance(dist, dict): return - integrity = dist.get('integrity') or None - if integrity: - algo, _, b64value = integrity.partition('-') - algo = algo.lower() - assert 'sha512' == algo - - decoded_b64value = base64.b64decode(b64value) - if isinstance(decoded_b64value, str): - sha512 = decoded_b64value.encode('hex') - elif isinstance(decoded_b64value, bytes): - sha512 = decoded_b64value.hex() - package.sha512 = sha512 - - sha1 = dist.get('shasum') - if sha1: - package.sha1 = sha1 + integrity = dist.get('integrity') + for algo, hexsum in get_algo_hexsum(integrity).items(): + if hasattr(package, algo): + setattr(package, algo, hexsum) + + package.sha1 = dist.get('shasum') or None dnl_url = dist.get('dnl_url') if not dnl_url: diff --git a/tests/packagedcode/data/npm/as_installed/package.json.expected b/tests/packagedcode/data/npm/as_installed/package.json.expected index 4560e897d88..0433b44aa04 100644 --- a/tests/packagedcode/data/npm/as_installed/package.json.expected +++ b/tests/packagedcode/data/npm/as_installed/package.json.expected @@ -2210,8 +2210,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2908,9 +2908,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/authors_list_dicts/package.json.expected b/tests/packagedcode/data/npm/authors_list_dicts/package.json.expected index db258537e5c..29fc85e83c6 100644 --- a/tests/packagedcode/data/npm/authors_list_dicts/package.json.expected +++ b/tests/packagedcode/data/npm/authors_list_dicts/package.json.expected @@ -58,8 +58,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -117,9 +117,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/grunt-csscomb@3.1.1", "repository_homepage_url": "https://www.npmjs.com/package/grunt-csscomb", "repository_download_url": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-csscomb/3.1.1" + "api_data_url": "https://registry.npmjs.org/grunt-csscomb/3.1.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/grunt-csscomb@3.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/authors_list_strings/package.json.expected b/tests/packagedcode/data/npm/authors_list_strings/package.json.expected index 69c475bb8f3..0db6e8f6160 100644 --- a/tests/packagedcode/data/npm/authors_list_strings/package.json.expected +++ b/tests/packagedcode/data/npm/authors_list_strings/package.json.expected @@ -53,8 +53,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -391,9 +391,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/react-motion@0.5.2", "repository_homepage_url": "https://www.npmjs.com/package/react-motion", "repository_download_url": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "api_data_url": "https://registry.npmjs.org/react-motion/0.5.2" + "api_data_url": "https://registry.npmjs.org/react-motion/0.5.2", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/react-motion@0.5.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/authors_list_strings2/package.json.expected b/tests/packagedcode/data/npm/authors_list_strings2/package.json.expected index 5f782d7e713..818c90207e1 100644 --- a/tests/packagedcode/data/npm/authors_list_strings2/package.json.expected +++ b/tests/packagedcode/data/npm/authors_list_strings2/package.json.expected @@ -47,8 +47,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -70,9 +70,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/exif@0.6.0", "repository_homepage_url": "https://www.npmjs.com/package/exif", "repository_download_url": "https://registry.npmjs.org/exif/-/exif-0.6.0.tgz", - "api_data_url": "https://registry.npmjs.org/exif/0.6.0" + "api_data_url": "https://registry.npmjs.org/exif/0.6.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/exif@0.6.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/basic/package.json.expected b/tests/packagedcode/data/npm/basic/package.json.expected index c8d52a4a810..034059f9cdb 100644 --- a/tests/packagedcode/data/npm/basic/package.json.expected +++ b/tests/packagedcode/data/npm/basic/package.json.expected @@ -37,8 +37,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -60,9 +60,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/cookie-signature@1.0.3", "repository_homepage_url": "https://www.npmjs.com/package/cookie-signature", "repository_download_url": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3" + "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/cookie-signature@1.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/bundledDeps/package.json.expected b/tests/packagedcode/data/npm/bundledDeps/package.json.expected index 748bcc0068b..b4fd1469057 100644 --- a/tests/packagedcode/data/npm/bundledDeps/package.json.expected +++ b/tests/packagedcode/data/npm/bundledDeps/package.json.expected @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/pahub@0.4.0", "repository_homepage_url": "https://www.npmjs.com/package/pahub", "repository_download_url": "https://registry.npmjs.org/pahub/-/pahub-0.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/pahub/0.4.0" + "api_data_url": "https://registry.npmjs.org/pahub/0.4.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/pahub@0.4.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/casepath/package.json.expected b/tests/packagedcode/data/npm/casepath/package.json.expected index 98c93630cfd..2d6bd83c1f0 100644 --- a/tests/packagedcode/data/npm/casepath/package.json.expected +++ b/tests/packagedcode/data/npm/casepath/package.json.expected @@ -35,8 +35,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -301,9 +301,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/casesensitivepathswebpackpluginDemo@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/casesensitivepathswebpackpluginDemo", "repository_download_url": "https://registry.npmjs.org/casesensitivepathswebpackpluginDemo/-/casesensitivepathswebpackpluginDemo-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/casesensitivepathswebpackpluginDemo/0.0.1" + "api_data_url": "https://registry.npmjs.org/casesensitivepathswebpackpluginDemo/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/casesensitivepathswebpackpluginDemo@0.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/chartist/package.json.expected b/tests/packagedcode/data/npm/chartist/package.json.expected index 803099508ad..dfaaf12eb58 100644 --- a/tests/packagedcode/data/npm/chartist/package.json.expected +++ b/tests/packagedcode/data/npm/chartist/package.json.expected @@ -48,8 +48,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -323,9 +323,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/chartist@0.11.0", "repository_homepage_url": "https://www.npmjs.com/package/chartist", "repository_download_url": "https://registry.npmjs.org/chartist/-/chartist-0.11.0.tgz", - "api_data_url": "https://registry.npmjs.org/chartist/0.11.0" + "api_data_url": "https://registry.npmjs.org/chartist/0.11.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/chartist@0.11.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/dist/package.json.expected b/tests/packagedcode/data/npm/dist/package.json.expected index e1184c529cb..db7a339ac8c 100644 --- a/tests/packagedcode/data/npm/dist/package.json.expected +++ b/tests/packagedcode/data/npm/dist/package.json.expected @@ -35,8 +35,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -85,9 +85,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/angular-compare-validator@0.1.1", "repository_homepage_url": "https://www.npmjs.com/package/angular-compare-validator", "repository_download_url": "https://registry.npmjs.org/angular-compare-validator/-/angular-compare-validator-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/angular-compare-validator/0.1.1" + "api_data_url": "https://registry.npmjs.org/angular-compare-validator/0.1.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/angular-compare-validator@0.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/double_license/package.json.expected b/tests/packagedcode/data/npm/double_license/package.json.expected index 304d4f9ea56..5656aaf4137 100644 --- a/tests/packagedcode/data/npm/double_license/package.json.expected +++ b/tests/packagedcode/data/npm/double_license/package.json.expected @@ -41,8 +41,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -136,9 +136,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/grunt-esvm@3.2.8", "repository_homepage_url": "https://www.npmjs.com/package/grunt-esvm", "repository_download_url": "https://registry.npmjs.org/grunt-esvm/-/grunt-esvm-3.2.8.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-esvm/3.2.8" + "api_data_url": "https://registry.npmjs.org/grunt-esvm/3.2.8", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/grunt-esvm@3.2.8" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/express-jwt-3.4.0/package.json.expected b/tests/packagedcode/data/npm/express-jwt-3.4.0/package.json.expected index 7226127c5de..de65966f994 100644 --- a/tests/packagedcode/data/npm/express-jwt-3.4.0/package.json.expected +++ b/tests/packagedcode/data/npm/express-jwt-3.4.0/package.json.expected @@ -49,8 +49,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -99,9 +99,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/express-jwt@3.4.0", "repository_homepage_url": "https://www.npmjs.com/package/express-jwt", "repository_download_url": "https://registry.npmjs.org/express-jwt/-/express-jwt-3.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/express-jwt/3.4.0" + "api_data_url": "https://registry.npmjs.org/express-jwt/3.4.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/express-jwt@3.4.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/from_npmjs/package.json.expected b/tests/packagedcode/data/npm/from_npmjs/package.json.expected index c3bcfc25874..976e83ca761 100644 --- a/tests/packagedcode/data/npm/from_npmjs/package.json.expected +++ b/tests/packagedcode/data/npm/from_npmjs/package.json.expected @@ -2210,8 +2210,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2908,9 +2908,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/from_tarball/package.json.expected b/tests/packagedcode/data/npm/from_tarball/package.json.expected index f2f789dfa77..fdd3d255bb6 100644 --- a/tests/packagedcode/data/npm/from_tarball/package.json.expected +++ b/tests/packagedcode/data/npm/from_tarball/package.json.expected @@ -40,8 +40,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -729,9 +729,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/get_package_resources.scan.expected.json b/tests/packagedcode/data/npm/get_package_resources.scan.expected.json new file mode 100644 index 00000000000..18dd96ae4ce --- /dev/null +++ b/tests/packagedcode/data/npm/get_package_resources.scan.expected.json @@ -0,0 +1,144 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 3 + } + } + ], + "dependencies": [], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "test", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://www.npmjs.com/package/test", + "repository_download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/test/0.1.0", + "package_uid": "pkg:npm/test@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "get_package_resources/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/test@0.1.0" + } + ], + "files": [ + { + "path": "get_package_resources", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "get_package_resources/node_modules", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "get_package_resources/node_modules/this-should-not-be-returned", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "get_package_resources/package.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "test", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/test", + "repository_download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/test/0.1.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test@0.1.0" + } + ], + "for_packages": [ + "pkg:npm/test@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "get_package_resources/this-should-be-returned", + "type": "file", + "package_data": [], + "for_packages": [], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/npm/homepage-as-list/package.json.expected b/tests/packagedcode/data/npm/homepage-as-list/package.json.expected index 4ac5f1211fd..b35ba64561b 100644 --- a/tests/packagedcode/data/npm/homepage-as-list/package.json.expected +++ b/tests/packagedcode/data/npm/homepage-as-list/package.json.expected @@ -53,8 +53,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -112,9 +112,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm-research@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/npm-research", "repository_download_url": "https://registry.npmjs.org/npm-research/-/npm-research-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/npm-research/0.0.1" + "api_data_url": "https://registry.npmjs.org/npm-research/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm-research@0.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/invalid-dep/package.json.expected b/tests/packagedcode/data/npm/invalid-dep/package.json.expected index 024fe7d0108..dd1e01e2b75 100644 --- a/tests/packagedcode/data/npm/invalid-dep/package.json.expected +++ b/tests/packagedcode/data/npm/invalid-dep/package.json.expected @@ -44,8 +44,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -58,9 +58,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/angular2-autosize@1.0.0", "repository_homepage_url": "https://www.npmjs.com/package/angular2-autosize", "repository_download_url": "https://registry.npmjs.org/angular2-autosize/-/angular2-autosize-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/angular2-autosize/1.0.0" + "api_data_url": "https://registry.npmjs.org/angular2-autosize/1.0.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/angular2-autosize@1.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/keywords/package.json.expected b/tests/packagedcode/data/npm/keywords/package.json.expected index 2c0756a190c..83697c70292 100644 --- a/tests/packagedcode/data/npm/keywords/package.json.expected +++ b/tests/packagedcode/data/npm/keywords/package.json.expected @@ -59,8 +59,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -73,9 +73,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/lodash.clonedeep@4.3.2", "repository_homepage_url": "https://www.npmjs.com/package/lodash.clonedeep", "repository_download_url": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz", - "api_data_url": "https://registry.npmjs.org/lodash.clonedeep/4.3.2" + "api_data_url": "https://registry.npmjs.org/lodash.clonedeep/4.3.2", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/lodash.clonedeep@4.3.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/legacy_license_dict/package.json.expected b/tests/packagedcode/data/npm/legacy_license_dict/package.json.expected index 7484a301ee4..1c90c7c2030 100644 --- a/tests/packagedcode/data/npm/legacy_license_dict/package.json.expected +++ b/tests/packagedcode/data/npm/legacy_license_dict/package.json.expected @@ -45,8 +45,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -113,9 +113,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/grunt-inline-imgsize@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/grunt-inline-imgsize", "repository_download_url": "https://registry.npmjs.org/grunt-inline-imgsize/-/grunt-inline-imgsize-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-inline-imgsize/0.0.1" + "api_data_url": "https://registry.npmjs.org/grunt-inline-imgsize/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/grunt-inline-imgsize@0.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/mime-1.3.4/package.json.expected b/tests/packagedcode/data/npm/mime-1.3.4/package.json.expected index ade4d3ce656..0829dea4177 100644 --- a/tests/packagedcode/data/npm/mime-1.3.4/package.json.expected +++ b/tests/packagedcode/data/npm/mime-1.3.4/package.json.expected @@ -48,8 +48,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -62,9 +62,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/mime@1.3.4", "repository_homepage_url": "https://www.npmjs.com/package/mime", "repository_download_url": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "api_data_url": "https://registry.npmjs.org/mime/1.3.4" + "api_data_url": "https://registry.npmjs.org/mime/1.3.4", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/mime@1.3.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/nodep/package.json.expected b/tests/packagedcode/data/npm/nodep/package.json.expected index 91269dcd56d..d9651acaa6e 100644 --- a/tests/packagedcode/data/npm/nodep/package.json.expected +++ b/tests/packagedcode/data/npm/nodep/package.json.expected @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -255,9 +255,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/etcd-dashboard@0.0.0", "repository_homepage_url": "https://www.npmjs.com/package/etcd-dashboard", "repository_download_url": "https://registry.npmjs.org/etcd-dashboard/-/etcd-dashboard-0.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/etcd-dashboard/0.0.0" + "api_data_url": "https://registry.npmjs.org/etcd-dashboard/0.0.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/etcd-dashboard@0.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/npm-shrinkwrap/npm-shrinkwrap.json-expected b/tests/packagedcode/data/npm/npm-shrinkwrap/npm-shrinkwrap.json-expected index da493998c0c..50a14cf6117 100644 --- a/tests/packagedcode/data/npm/npm-shrinkwrap/npm-shrinkwrap.json-expected +++ b/tests/packagedcode/data/npm/npm-shrinkwrap/npm-shrinkwrap.json-expected @@ -1,7 +1,7 @@ [ { "type": "npm", - "namespace": null, + "namespace": "", "name": "bootstrap", "version": "3.3.7", "qualifiers": {}, @@ -25,19646 +25,23985 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [], + "extra_data": { + "lockfile_version": 1 + }, "dependencies": [ { "purl": "pkg:npm/abbrev@1.0.9", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "abbrev", + "version": "1.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "abbrev", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/abbrev", + "repository_download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/abbrev/1.0.9", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/abbrev@1.0.9" + } }, { "purl": "pkg:npm/accepts@1.3.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "accepts", + "version": "1.3.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "accepts", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/accepts", + "repository_download_url": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "api_data_url": "https://registry.npmjs.org/accepts/1.3.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/accepts@1.3.3" + } }, { "purl": "pkg:npm/acorn@3.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "acorn", + "version": "3.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/acorn/-/acorn-3.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "acorn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/acorn", + "repository_download_url": "https://registry.npmjs.org/acorn/-/acorn-3.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/acorn/3.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/acorn@3.2.0" + } }, { "purl": "pkg:npm/acorn-globals@3.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "acorn-globals", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "acorn-globals", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/acorn-globals", + "repository_download_url": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/acorn-globals/3.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/acorn-globals@3.0.0" + } }, { "purl": "pkg:npm/agent-base@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "agent-base", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/agent-base/-/agent-base-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "agent-base", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/agent-base", + "repository_download_url": "https://registry.npmjs.org/agent-base/-/agent-base-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/agent-base/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/agent-base@2.0.1" + } }, { "purl": "pkg:npm/align-text@0.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "align-text", + "version": "0.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "align-text", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/align-text", + "repository_download_url": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/align-text/0.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/align-text@0.1.4" + } }, { "purl": "pkg:npm/amdefine@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "amdefine", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "amdefine", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/amdefine", + "repository_download_url": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/amdefine/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/amdefine@1.0.0" + } }, { "purl": "pkg:npm/ansi-regex@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-regex", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ansi-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", + "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-regex/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ansi-regex@2.0.0" + } }, { "purl": "pkg:npm/ansi-styles@2.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-styles", + "version": "2.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ansi-styles", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-styles", + "repository_download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-styles/2.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ansi-styles@2.2.1" + } }, { "purl": "pkg:npm/archiver@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "archiver", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/archiver/-/archiver-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "archiver", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/archiver", + "repository_download_url": "https://registry.npmjs.org/archiver/-/archiver-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/archiver/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/archiver@1.0.0" + } }, { "purl": "pkg:npm/archiver-utils@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "archiver-utils", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "archiver-utils", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/archiver-utils", + "repository_download_url": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/archiver-utils/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/archiver-utils@1.2.0" + } }, { "purl": "pkg:npm/argparse@1.0.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "argparse", + "version": "1.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/argparse/-/argparse-1.0.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "argparse", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/argparse", + "repository_download_url": "https://registry.npmjs.org/argparse/-/argparse-1.0.7.tgz", + "api_data_url": "https://registry.npmjs.org/argparse/1.0.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/argparse@1.0.7" + } }, { "purl": "pkg:npm/array-differ@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "array-differ", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "array-differ", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/array-differ", + "repository_download_url": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/array-differ/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/array-differ@1.0.0" + } }, { "purl": "pkg:npm/array-find-index@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "array-find-index", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "array-find-index", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/array-find-index", + "repository_download_url": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/array-find-index/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/array-find-index@1.0.1" + } }, { "purl": "pkg:npm/array-union@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "array-union", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "array-union", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/array-union", + "repository_download_url": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/array-union/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/array-union@1.0.2" + } }, { "purl": "pkg:npm/array-uniq@1.0.3", - "extracted_requirement": null, + "extracted_requirement": "1.0.3", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "array-uniq", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "array-uniq", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/array-uniq", + "repository_download_url": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/array-uniq/1.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/array-uniq@1.0.3" + } }, { "purl": "pkg:npm/arrify@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "arrify", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "arrify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/arrify", + "repository_download_url": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/arrify/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/arrify@1.0.1" + } }, { "purl": "pkg:npm/asap@2.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "asap", + "version": "2.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "asap", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/asap", + "repository_download_url": "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/asap/2.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/asap@2.0.4" + } }, { "purl": "pkg:npm/asn1@0.2.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "asn1", + "version": "0.2.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "asn1", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/asn1", + "repository_download_url": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "api_data_url": "https://registry.npmjs.org/asn1/0.2.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/asn1@0.2.3" + } }, { "purl": "pkg:npm/assert-plus@0.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "assert-plus", + "version": "0.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "assert-plus", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/assert-plus", + "repository_download_url": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/assert-plus/0.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/assert-plus@0.2.0" + } }, { "purl": "pkg:npm/async@1.5.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.5.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "async", + "version": "1.5.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "async", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/async", + "repository_download_url": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "api_data_url": "https://registry.npmjs.org/async/1.5.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/async@1.5.2" + } }, { "purl": "pkg:npm/autoprefixer-core@5.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "5.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "autoprefixer-core", + "version": "5.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "autoprefixer-core", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/autoprefixer-core", + "repository_download_url": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/autoprefixer-core/5.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/autoprefixer-core@5.2.1" + } }, { "purl": "pkg:npm/aws-sign2@0.6.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "aws-sign2", + "version": "0.6.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "aws-sign2", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/aws-sign2", + "repository_download_url": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "api_data_url": "https://registry.npmjs.org/aws-sign2/0.6.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/aws-sign2@0.6.0" + } }, { "purl": "pkg:npm/aws4@1.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "aws4", + "version": "1.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/aws4/-/aws4-1.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "aws4", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/aws4", + "repository_download_url": "https://registry.npmjs.org/aws4/-/aws4-1.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/aws4/1.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/aws4@1.4.1" + } }, { "purl": "pkg:npm/babel-runtime@6.9.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "6.9.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-runtime", + "version": "6.9.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.9.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.9.2.tgz", + "api_data_url": "https://registry.npmjs.org/babel-runtime/6.9.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/babel-runtime@6.9.2" + } }, { "purl": "pkg:npm/babylon@6.8.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "6.8.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babylon", + "version": "6.8.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babylon/-/babylon-6.8.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babylon", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/babylon", + "repository_download_url": "https://registry.npmjs.org/babylon/-/babylon-6.8.4.tgz", + "api_data_url": "https://registry.npmjs.org/babylon/6.8.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/babylon@6.8.4" + } }, { "purl": "pkg:npm/balanced-match@0.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "balanced-match", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "balanced-match", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/balanced-match", + "repository_download_url": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/balanced-match/0.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/balanced-match@0.4.1" + } }, { "purl": "pkg:npm/basic-auth@1.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "basic-auth", + "version": "1.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "basic-auth", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/basic-auth", + "repository_download_url": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/basic-auth/1.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/basic-auth@1.0.4" + } }, { "purl": "pkg:npm/batch@0.5.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.5.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "batch", + "version": "0.5.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "batch", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/batch", + "repository_download_url": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "api_data_url": "https://registry.npmjs.org/batch/0.5.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/batch@0.5.3" + } }, { "purl": "pkg:npm/bl@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "bl", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "bl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/bl", + "repository_download_url": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/bl/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/bl@1.1.2" + } }, { "purl": "pkg:npm/body-parser@1.14.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.14.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "body-parser", + "version": "1.14.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "body-parser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/body-parser", + "repository_download_url": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "api_data_url": "https://registry.npmjs.org/body-parser/1.14.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/body-parser@1.14.2" + } }, { "purl": "pkg:npm/boom@2.10.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.10.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "boom", + "version": "2.10.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "boom", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/boom", + "repository_download_url": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "api_data_url": "https://registry.npmjs.org/boom/2.10.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/boom@2.10.1" + } }, { "purl": "pkg:npm/brace-expansion@1.1.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "brace-expansion", + "version": "1.1.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "brace-expansion", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/brace-expansion", + "repository_download_url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz", + "api_data_url": "https://registry.npmjs.org/brace-expansion/1.1.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/brace-expansion@1.1.5" + } }, { "purl": "pkg:npm/browserify-zlib@0.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "browserify-zlib", + "version": "0.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "browserify-zlib", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/browserify-zlib", + "repository_download_url": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/browserify-zlib/0.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/browserify-zlib@0.1.4" + } }, { "purl": "pkg:npm/browserslist@0.4.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "browserslist", + "version": "0.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "browserslist", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/browserslist", + "repository_download_url": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", + "api_data_url": "https://registry.npmjs.org/browserslist/0.4.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/browserslist@0.4.0" + } }, { "purl": "pkg:npm/btoa@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "btoa", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "btoa", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/btoa", + "repository_download_url": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/btoa/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/btoa@1.1.2" + } }, { "purl": "pkg:npm/buffer-crc32@0.2.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "buffer-crc32", + "version": "0.2.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "buffer-crc32", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/buffer-crc32", + "repository_download_url": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz", + "api_data_url": "https://registry.npmjs.org/buffer-crc32/0.2.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/buffer-crc32@0.2.5" + } }, { "purl": "pkg:npm/buffer-shims@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "buffer-shims", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "buffer-shims", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/buffer-shims", + "repository_download_url": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/buffer-shims/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/buffer-shims@1.0.0" + } }, { "purl": "pkg:npm/builtin-modules@1.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "builtin-modules", + "version": "1.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "builtin-modules", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/builtin-modules", + "repository_download_url": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/builtin-modules/1.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/builtin-modules@1.1.1" + } }, { "purl": "pkg:npm/bytes@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "bytes", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "bytes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/bytes", + "repository_download_url": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/bytes/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/bytes@2.2.0" + } }, { "purl": "pkg:npm/camel-case@3.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "camel-case", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "camel-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/camel-case", + "repository_download_url": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/camel-case/3.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/camel-case@3.0.0" + } }, { "purl": "pkg:npm/camelcase@2.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "camelcase", + "version": "2.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "camelcase", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/camelcase", + "repository_download_url": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/camelcase/2.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/camelcase@2.1.1" + } }, { "purl": "pkg:npm/camelcase-keys@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "camelcase-keys", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "camelcase-keys", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/camelcase-keys", + "repository_download_url": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/camelcase-keys/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/camelcase-keys@2.1.0" + } }, { "purl": "pkg:npm/caniuse-db@1.0.30000506", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.30000506", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "caniuse-db", + "version": "1.0.30000506", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000506.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "caniuse-db", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/caniuse-db", + "repository_download_url": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000506.tgz", + "api_data_url": "https://registry.npmjs.org/caniuse-db/1.0.30000506", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/caniuse-db@1.0.30000506" + } }, { "purl": "pkg:npm/caseless@0.11.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.11.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "caseless", + "version": "0.11.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "caseless", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/caseless", + "repository_download_url": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "api_data_url": "https://registry.npmjs.org/caseless/0.11.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/caseless@0.11.0" + } }, { "purl": "pkg:npm/center-align@0.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "center-align", + "version": "0.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "center-align", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/center-align", + "repository_download_url": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/center-align/0.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/center-align@0.1.3" + } }, { "purl": "pkg:npm/chalk@1.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "chalk", + "version": "1.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "chalk", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/chalk", + "repository_download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/chalk/1.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/chalk@1.1.3" + } }, { "purl": "pkg:npm/change-case@3.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "change-case", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/change-case/-/change-case-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "change-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/change-case", + "repository_download_url": "https://registry.npmjs.org/change-case/-/change-case-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/change-case/3.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/change-case@3.0.0" + } }, { "purl": "pkg:npm/character-parser@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "character-parser", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "character-parser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/character-parser", + "repository_download_url": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/character-parser/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/character-parser@2.2.0" + } }, { "purl": "pkg:npm/clean-css@3.4.18", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.4.18", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "clean-css", + "version": "3.4.18", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.18.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "clean-css", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/clean-css", + "repository_download_url": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.18.tgz", + "api_data_url": "https://registry.npmjs.org/clean-css/3.4.18", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/clean-css@3.4.18" + } }, { "purl": "pkg:npm/cli@0.6.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cli", + "version": "0.6.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cli", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cli", + "repository_download_url": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", + "api_data_url": "https://registry.npmjs.org/cli/0.6.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cli@0.6.6" + } }, { "purl": "pkg:npm/cli-table@0.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cli-table", + "version": "0.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cli-table", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cli-table", + "repository_download_url": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/cli-table/0.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cli-table@0.3.1" + } }, { "purl": "pkg:npm/cliui@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cliui", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cliui", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cliui", + "repository_download_url": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/cliui/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cliui@2.1.0" + } }, { "purl": "pkg:npm/coffee-script@1.10.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.10.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "coffee-script", + "version": "1.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "coffee-script", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/coffee-script", + "repository_download_url": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", + "api_data_url": "https://registry.npmjs.org/coffee-script/1.10.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/coffee-script@1.10.0" + } }, { "purl": "pkg:npm/colors@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "colors", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "colors", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/colors", + "repository_download_url": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/colors/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/colors@1.1.2" + } }, { "purl": "pkg:npm/combined-stream@1.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "combined-stream", + "version": "1.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "combined-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/combined-stream", + "repository_download_url": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/combined-stream/1.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/combined-stream@1.0.5" + } }, { "purl": "pkg:npm/commander@2.8.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.8.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "commander", + "version": "2.8.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "commander", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/commander", + "repository_download_url": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "api_data_url": "https://registry.npmjs.org/commander/2.8.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/commander@2.8.1" + } }, { "purl": "pkg:npm/comment-parser@0.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "comment-parser", + "version": "0.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "comment-parser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/comment-parser", + "repository_download_url": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/comment-parser/0.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/comment-parser@0.3.1" + } }, { "purl": "pkg:npm/compress-commons@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "compress-commons", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "compress-commons", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/compress-commons", + "repository_download_url": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/compress-commons/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/compress-commons@1.0.0" + } }, { "purl": "pkg:npm/concat-map@0.0.1", - "extracted_requirement": null, + "extracted_requirement": "0.0.1", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "concat-map", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "concat-map", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/concat-map", + "repository_download_url": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/concat-map/0.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/concat-map@0.0.1" + } }, { "purl": "pkg:npm/concat-stream@1.5.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "concat-stream", + "version": "1.5.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "concat-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/concat-stream", + "repository_download_url": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz", + "api_data_url": "https://registry.npmjs.org/concat-stream/1.5.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/concat-stream@1.5.1" + } }, { "purl": "pkg:npm/connect@3.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "connect", + "version": "3.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "connect", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/connect", + "repository_download_url": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/connect/3.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/connect@3.4.1" + } }, { "purl": "pkg:npm/connect-livereload@0.5.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.5.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "connect-livereload", + "version": "0.5.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "connect-livereload", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/connect-livereload", + "repository_download_url": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", + "api_data_url": "https://registry.npmjs.org/connect-livereload/0.5.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/connect-livereload@0.5.4" + } }, { "purl": "pkg:npm/console-browserify@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "console-browserify", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "console-browserify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/console-browserify", + "repository_download_url": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/console-browserify/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/console-browserify@1.1.0" + } }, { "purl": "pkg:npm/constant-case@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "constant-case", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "constant-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/constant-case", + "repository_download_url": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/constant-case/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/constant-case@2.0.0" + } }, { "purl": "pkg:npm/constantinople@3.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "constantinople", + "version": "3.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "constantinople", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/constantinople", + "repository_download_url": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/constantinople/3.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/constantinople@3.1.0" + } }, { "purl": "pkg:npm/content-type@1.0.2", - "extracted_requirement": null, + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "content-type", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "content-type", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/content-type", + "repository_download_url": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/content-type/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/content-type@1.0.2" + } + }, + { + "purl": "pkg:npm/core-js@2.4.0", + "extracted_requirement": "2.4.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/core-js@2.4.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "core-js", + "version": "2.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/core-js/-/core-js-2.4.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "core-js", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/core-js", + "repository_download_url": "https://registry.npmjs.org/core-js/-/core-js-2.4.0.tgz", + "api_data_url": "https://registry.npmjs.org/core-js/2.4.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/core-js@2.4.0" + } }, { "purl": "pkg:npm/core-util-is@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "core-util-is", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "core-util-is", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/core-util-is", + "repository_download_url": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/core-util-is/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/core-util-is@1.0.2" + } }, { "purl": "pkg:npm/crc32-stream@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "crc32-stream", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "crc32-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/crc32-stream", + "repository_download_url": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/crc32-stream/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/crc32-stream@1.0.0" + } }, { "purl": "pkg:npm/cryptiles@2.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cryptiles", + "version": "2.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cryptiles", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cryptiles", + "repository_download_url": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/cryptiles/2.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cryptiles@2.0.5" + } }, { "purl": "pkg:npm/csscomb@3.1.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.1.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "csscomb", + "version": "3.1.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/csscomb/-/csscomb-3.1.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "csscomb", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/csscomb", + "repository_download_url": "https://registry.npmjs.org/csscomb/-/csscomb-3.1.8.tgz", + "api_data_url": "https://registry.npmjs.org/csscomb/3.1.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/csscomb@3.1.8" + } }, { "purl": "pkg:npm/csscomb-core@3.0.0-3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0-3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "csscomb-core", + "version": "3.0.0-3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "csscomb-core", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/csscomb-core", + "repository_download_url": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz", + "api_data_url": "https://registry.npmjs.org/csscomb-core/3.0.0-3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/csscomb-core@3.0.0-3.1" + } }, { "purl": "pkg:npm/csslint@0.10.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.10.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "csslint", + "version": "0.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "csslint", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/csslint", + "repository_download_url": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", + "api_data_url": "https://registry.npmjs.org/csslint/0.10.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/csslint@0.10.0" + } }, { "purl": "pkg:npm/cst@0.4.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cst", + "version": "0.4.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cst/-/cst-0.4.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cst", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cst", + "repository_download_url": "https://registry.npmjs.org/cst/-/cst-0.4.4.tgz", + "api_data_url": "https://registry.npmjs.org/cst/0.4.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cst@0.4.4" + } }, { "purl": "pkg:npm/currently-unhandled@0.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "currently-unhandled", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "currently-unhandled", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/currently-unhandled", + "repository_download_url": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/currently-unhandled/0.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/currently-unhandled@0.4.1" + } }, { "purl": "pkg:npm/cycle@1.0.3", - "extracted_requirement": null, + "extracted_requirement": "1.0.3", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "cycle", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "cycle", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/cycle", + "repository_download_url": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/cycle/1.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/cycle@1.0.3" + } }, { "purl": "pkg:npm/dashdash@1.14.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.14.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "dashdash", + "version": "1.14.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "dashdash", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/dashdash", + "repository_download_url": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", + "api_data_url": "https://registry.npmjs.org/dashdash/1.14.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/dashdash@1.14.0" + } }, { "purl": "pkg:npm/date-now@0.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "date-now", + "version": "0.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "date-now", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/date-now", + "repository_download_url": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/date-now/0.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/date-now@0.1.4" + } }, { "purl": "pkg:npm/date-time@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "date-time", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/date-time/-/date-time-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "date-time", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/date-time", + "repository_download_url": "https://registry.npmjs.org/date-time/-/date-time-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/date-time/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/date-time@1.0.0" + } }, { "purl": "pkg:npm/dateformat@1.0.12", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.12", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "dateformat", + "version": "1.0.12", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "dateformat", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/dateformat", + "repository_download_url": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "api_data_url": "https://registry.npmjs.org/dateformat/1.0.12", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/dateformat@1.0.12" + } }, { "purl": "pkg:npm/debug@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "debug", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "debug", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/debug", + "repository_download_url": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/debug/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/debug@2.2.0" + } }, { "purl": "pkg:npm/decamelize@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "decamelize", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "decamelize", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/decamelize", + "repository_download_url": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/decamelize/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/decamelize@1.2.0" + } }, { "purl": "pkg:npm/deep-equal@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "deep-equal", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "deep-equal", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/deep-equal", + "repository_download_url": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/deep-equal/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/deep-equal@1.0.1" + } }, { "purl": "pkg:npm/delayed-stream@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "delayed-stream", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "delayed-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/delayed-stream", + "repository_download_url": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/delayed-stream/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/delayed-stream@1.0.0" + } }, { "purl": "pkg:npm/depd@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "depd", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "depd", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/depd", + "repository_download_url": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/depd/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/depd@1.1.0" + } }, { "purl": "pkg:npm/destroy@1.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "destroy", + "version": "1.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "destroy", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/destroy", + "repository_download_url": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/destroy/1.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/destroy@1.0.4" + } }, { "purl": "pkg:npm/diff@1.3.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "diff", + "version": "1.3.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/diff/-/diff-1.3.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "diff", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/diff", + "repository_download_url": "https://registry.npmjs.org/diff/-/diff-1.3.2.tgz", + "api_data_url": "https://registry.npmjs.org/diff/1.3.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/diff@1.3.2" + } }, { "purl": "pkg:npm/doctypes@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "doctypes", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/doctypes/-/doctypes-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "doctypes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/doctypes", + "repository_download_url": "https://registry.npmjs.org/doctypes/-/doctypes-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/doctypes/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/doctypes@1.0.0" + } }, { "purl": "pkg:npm/dom-serializer@0.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "dom-serializer", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "dom-serializer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/dom-serializer", + "repository_download_url": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/dom-serializer/0.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/dom-serializer@0.1.0" + } }, { "purl": "pkg:npm/domelementtype@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "domelementtype", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "domelementtype", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/domelementtype", + "repository_download_url": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/domelementtype/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/domelementtype@1.3.0" + } }, { "purl": "pkg:npm/domhandler@2.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "domhandler", + "version": "2.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "domhandler", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/domhandler", + "repository_download_url": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/domhandler/2.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/domhandler@2.3.0" + } }, { "purl": "pkg:npm/domutils@1.5.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "domutils", + "version": "1.5.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "domutils", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/domutils", + "repository_download_url": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "api_data_url": "https://registry.npmjs.org/domutils/1.5.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/domutils@1.5.1" + } }, { "purl": "pkg:npm/dot-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "dot-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "dot-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/dot-case", + "repository_download_url": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/dot-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/dot-case@2.1.0" + } }, { "purl": "pkg:npm/ecc-jsbn@0.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ecc-jsbn", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ecc-jsbn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ecc-jsbn", + "repository_download_url": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/ecc-jsbn/0.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ecc-jsbn@0.1.1" + } }, { "purl": "pkg:npm/ee-first@1.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ee-first", + "version": "1.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ee-first", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ee-first", + "repository_download_url": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/ee-first/1.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ee-first@1.1.1" + } }, { "purl": "pkg:npm/encodeurl@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "encodeurl", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "encodeurl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/encodeurl", + "repository_download_url": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/encodeurl/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/encodeurl@1.0.1" + } }, { "purl": "pkg:npm/end-of-stream@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "end-of-stream", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "end-of-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/end-of-stream", + "repository_download_url": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/end-of-stream/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/end-of-stream@1.1.0" + } }, { "purl": "pkg:npm/entities@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "entities", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "entities", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/entities", + "repository_download_url": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/entities/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/entities@1.0.0" + } }, { "purl": "pkg:npm/errno@0.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "errno", + "version": "0.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "errno", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/errno", + "repository_download_url": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/errno/0.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/errno@0.1.4" + } }, { "purl": "pkg:npm/error-ex@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "error-ex", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "error-ex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/error-ex", + "repository_download_url": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/error-ex/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/error-ex@1.3.0" + } }, { "purl": "pkg:npm/es6-promise@2.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "es6-promise", + "version": "2.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "es6-promise", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/es6-promise", + "repository_download_url": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/es6-promise/2.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/es6-promise@2.3.0" + } }, { "purl": "pkg:npm/escape-html@1.0.3", - "extracted_requirement": null, + "extracted_requirement": "1.0.3", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "escape-html", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "escape-html", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/escape-html", + "repository_download_url": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/escape-html/1.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/escape-html@1.0.3" + } }, { "purl": "pkg:npm/escape-string-regexp@1.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "escape-string-regexp", + "version": "1.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "escape-string-regexp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/escape-string-regexp", + "repository_download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/escape-string-regexp/1.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/escape-string-regexp@1.0.5" + } }, { "purl": "pkg:npm/esprima@2.7.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.7.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "esprima", + "version": "2.7.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/esprima/-/esprima-2.7.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "esprima", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/esprima", + "repository_download_url": "https://registry.npmjs.org/esprima/-/esprima-2.7.2.tgz", + "api_data_url": "https://registry.npmjs.org/esprima/2.7.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/esprima@2.7.2" + } }, { "purl": "pkg:npm/estraverse@4.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "estraverse", + "version": "4.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "estraverse", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/estraverse", + "repository_download_url": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/estraverse/4.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/estraverse@4.2.0" + } }, { "purl": "pkg:npm/etag@1.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "etag", + "version": "1.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "etag", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/etag", + "repository_download_url": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/etag/1.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/etag@1.7.0" + } }, { "purl": "pkg:npm/eventemitter2@0.4.14", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "eventemitter2", + "version": "0.4.14", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "eventemitter2", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/eventemitter2", + "repository_download_url": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "api_data_url": "https://registry.npmjs.org/eventemitter2/0.4.14", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/eventemitter2@0.4.14" + } }, { "purl": "pkg:npm/exit@0.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "exit", + "version": "0.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "exit", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/exit", + "repository_download_url": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/exit/0.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/exit@0.1.2" + } }, { "purl": "pkg:npm/extend@3.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "extend", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "extend", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/extend", + "repository_download_url": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/extend/3.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/extend@3.0.0" + } }, { "purl": "pkg:npm/extract-zip@1.5.0", - "extracted_requirement": null, + "extracted_requirement": "1.5.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "extract-zip", + "version": "1.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "extract-zip", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/extract-zip", + "repository_download_url": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "api_data_url": "https://registry.npmjs.org/extract-zip/1.5.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/extract-zip@1.5.0" + } }, { "purl": "pkg:npm/extsprintf@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "extsprintf", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "extsprintf", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/extsprintf", + "repository_download_url": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/extsprintf/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/extsprintf@1.0.2" + } }, { "purl": "pkg:npm/eyes@0.1.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "eyes", + "version": "0.1.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "eyes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/eyes", + "repository_download_url": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "api_data_url": "https://registry.npmjs.org/eyes/0.1.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/eyes@0.1.8" + } }, { "purl": "pkg:npm/faye-websocket@0.10.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.10.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "faye-websocket", + "version": "0.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "faye-websocket", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/faye-websocket", + "repository_download_url": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "api_data_url": "https://registry.npmjs.org/faye-websocket/0.10.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/faye-websocket@0.10.0" + } }, { "purl": "pkg:npm/fd-slicer@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fd-slicer", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "fd-slicer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fd-slicer", + "repository_download_url": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/fd-slicer/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/fd-slicer@1.0.1" + } }, { "purl": "pkg:npm/fg-lodash@0.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fg-lodash", + "version": "0.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "fg-lodash", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fg-lodash", + "repository_download_url": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/fg-lodash/0.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/fg-lodash@0.0.2" + } }, { "purl": "pkg:npm/figures@1.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "figures", + "version": "1.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "figures", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/figures", + "repository_download_url": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/figures/1.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/figures@1.7.0" + } }, { "purl": "pkg:npm/file-sync-cmp@0.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "file-sync-cmp", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "file-sync-cmp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/file-sync-cmp", + "repository_download_url": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/file-sync-cmp/0.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/file-sync-cmp@0.1.1" + } }, { "purl": "pkg:npm/finalhandler@0.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "finalhandler", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "finalhandler", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/finalhandler", + "repository_download_url": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/finalhandler/0.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/finalhandler@0.4.1" + } }, { "purl": "pkg:npm/find-up@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "find-up", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "find-up", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/find-up", + "repository_download_url": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/find-up/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/find-up@1.1.2" + } }, { "purl": "pkg:npm/findup-sync@0.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "findup-sync", + "version": "0.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "findup-sync", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/findup-sync", + "repository_download_url": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/findup-sync/0.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/findup-sync@0.3.0" + } }, { "purl": "pkg:npm/forever-agent@0.6.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "forever-agent", + "version": "0.6.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "forever-agent", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/forever-agent", + "repository_download_url": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "api_data_url": "https://registry.npmjs.org/forever-agent/0.6.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/forever-agent@0.6.1" + } }, { "purl": "pkg:npm/form-data@1.0.0-rc4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0-rc4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "form-data", + "version": "1.0.0-rc4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "form-data", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/form-data", + "repository_download_url": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", + "api_data_url": "https://registry.npmjs.org/form-data/1.0.0-rc4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/form-data@1.0.0-rc4" + } }, { "purl": "pkg:npm/fresh@0.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fresh", + "version": "0.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "fresh", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fresh", + "repository_download_url": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/fresh/0.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/fresh@0.3.0" + } }, { "purl": "pkg:npm/fs-extra@0.26.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.26.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fs-extra", + "version": "0.26.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "fs-extra", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fs-extra", + "repository_download_url": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "api_data_url": "https://registry.npmjs.org/fs-extra/0.26.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/fs-extra@0.26.7" + } }, { "purl": "pkg:npm/fs.realpath@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fs.realpath", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "fs.realpath", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fs.realpath", + "repository_download_url": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/fs.realpath/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/fs.realpath@1.0.0" + } }, { "purl": "pkg:npm/gaze@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "gaze", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/gaze/-/gaze-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "gaze", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/gaze", + "repository_download_url": "https://registry.npmjs.org/gaze/-/gaze-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/gaze/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/gaze@1.1.0" + } }, { "purl": "pkg:npm/generate-function@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "generate-function", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "generate-function", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/generate-function", + "repository_download_url": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/generate-function/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/generate-function@2.0.0" + } }, { "purl": "pkg:npm/generate-object-property@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "generate-object-property", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "generate-object-property", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/generate-object-property", + "repository_download_url": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/generate-object-property/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/generate-object-property@1.2.0" + } }, { "purl": "pkg:npm/get-stdin@4.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "get-stdin", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "get-stdin", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/get-stdin", + "repository_download_url": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/get-stdin/4.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/get-stdin@4.0.1" + } }, { "purl": "pkg:npm/getobject@0.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "getobject", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "getobject", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/getobject", + "repository_download_url": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/getobject/0.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/getobject@0.1.0" + } }, { "purl": "pkg:npm/getpass@0.1.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "getpass", + "version": "0.1.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "getpass", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/getpass", + "repository_download_url": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "api_data_url": "https://registry.npmjs.org/getpass/0.1.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/getpass@0.1.6" + } }, { "purl": "pkg:npm/glob@7.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "7.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "glob", + "version": "7.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "glob", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/glob", + "repository_download_url": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/glob/7.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/glob@7.0.5" + } }, { "purl": "pkg:npm/globule@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "globule", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/globule/-/globule-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "globule", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/globule", + "repository_download_url": "https://registry.npmjs.org/globule/-/globule-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/globule/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/globule@1.0.0" + } }, { "purl": "pkg:npm/gonzales-pe@3.0.0-28", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0-28", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "gonzales-pe", + "version": "3.0.0-28", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "gonzales-pe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/gonzales-pe", + "repository_download_url": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz", + "api_data_url": "https://registry.npmjs.org/gonzales-pe/3.0.0-28", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/gonzales-pe@3.0.0-28" + } }, { "purl": "pkg:npm/graceful-fs@4.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "graceful-fs", + "version": "4.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "graceful-fs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/graceful-fs", + "repository_download_url": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/graceful-fs/4.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/graceful-fs@4.1.4" + } }, { "purl": "pkg:npm/graceful-readlink@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "graceful-readlink", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "graceful-readlink", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/graceful-readlink", + "repository_download_url": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/graceful-readlink/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/graceful-readlink@1.0.1" + } }, { "purl": "pkg:npm/grunt@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt", + "repository_download_url": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt@1.0.1" + } }, { "purl": "pkg:npm/grunt-autoprefixer@3.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-autoprefixer", + "version": "3.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-3.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-autoprefixer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-autoprefixer", + "repository_download_url": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-3.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-autoprefixer/3.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-autoprefixer@3.0.4" + } }, { "purl": "pkg:npm/grunt-contrib-clean@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-clean", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-clean", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-clean", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-clean/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-clean@1.0.0" + } }, { "purl": "pkg:npm/grunt-contrib-compress@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-compress", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-compress", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-compress", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-compress/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-compress@1.3.0" + } }, { "purl": "pkg:npm/grunt-contrib-concat@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-concat", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-concat", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-concat", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-concat/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-concat@1.0.1" + } }, { "purl": "pkg:npm/grunt-contrib-connect@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-connect", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-connect", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-connect", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-connect/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-connect@1.0.2" + } }, { "purl": "pkg:npm/grunt-contrib-copy@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-copy", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-copy", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-copy", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-copy/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-copy@1.0.0" + } }, { "purl": "pkg:npm/grunt-contrib-csslint@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-csslint", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-csslint", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-csslint", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-csslint/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-csslint@1.0.0" + } }, { "purl": "pkg:npm/grunt-contrib-cssmin@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-cssmin", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-cssmin", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-cssmin", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-cssmin/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-cssmin@1.0.1" + } }, { "purl": "pkg:npm/grunt-contrib-htmlmin@1.5.0", - "extracted_requirement": null, + "extracted_requirement": "1.5.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-htmlmin", + "version": "1.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-1.5.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-htmlmin", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-htmlmin", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-1.5.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/1.5.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-htmlmin@1.5.0" + } }, { "purl": "pkg:npm/grunt-contrib-jshint@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-jshint", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-jshint", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-jshint", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-jshint/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-jshint@1.0.0" + } }, { "purl": "pkg:npm/grunt-contrib-less@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-less", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-less", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-less", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-less/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-less@1.3.0" + } }, { "purl": "pkg:npm/grunt-contrib-pug@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-pug", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-pug/-/grunt-contrib-pug-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-pug", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-pug", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-pug/-/grunt-contrib-pug-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-pug/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-pug@1.0.0" + } }, { "purl": "pkg:npm/grunt-contrib-qunit@0.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-qunit", + "version": "0.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-qunit", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-qunit", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-qunit/0.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-qunit@0.7.0" + } }, { "purl": "pkg:npm/grunt-contrib-uglify@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-uglify", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-uglify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-uglify", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-uglify/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-uglify@1.0.1" + } }, { "purl": "pkg:npm/grunt-contrib-watch@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-contrib-watch", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-contrib-watch", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-watch", + "repository_download_url": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-contrib-watch/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-contrib-watch@1.0.0" + } }, { "purl": "pkg:npm/grunt-csscomb@3.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-csscomb", + "version": "3.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-csscomb", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-csscomb", + "repository_download_url": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-csscomb/3.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-csscomb@3.1.1" + } }, { "purl": "pkg:npm/grunt-exec@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-exec", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-exec", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-exec", + "repository_download_url": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-exec/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-exec@1.0.0" + } }, { "purl": "pkg:npm/grunt-html@8.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "8.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-html", + "version": "8.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-html/-/grunt-html-8.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-html", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-html", + "repository_download_url": "https://registry.npmjs.org/grunt-html/-/grunt-html-8.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-html/8.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-html@8.0.2" + } }, { "purl": "pkg:npm/grunt-jekyll@0.4.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-jekyll", + "version": "0.4.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-jekyll", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-jekyll", + "repository_download_url": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.4.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-jekyll/0.4.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-jekyll@0.4.4" + } }, { "purl": "pkg:npm/grunt-jscs@3.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-jscs", + "version": "3.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-3.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-jscs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-jscs", + "repository_download_url": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-3.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-jscs/3.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-jscs@3.0.1" + } }, { "purl": "pkg:npm/grunt-known-options@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-known-options", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-known-options", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-known-options", + "repository_download_url": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-known-options/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-known-options@1.1.0" + } }, { "purl": "pkg:npm/grunt-legacy-log@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-legacy-log", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-legacy-log", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-log", + "repository_download_url": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-legacy-log/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-legacy-log@1.0.0" + } }, { "purl": "pkg:npm/grunt-legacy-log-utils@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-legacy-log-utils", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-legacy-log-utils", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-log-utils", + "repository_download_url": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-legacy-log-utils/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-legacy-log-utils@1.0.0" + } }, { "purl": "pkg:npm/grunt-legacy-util@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-legacy-util", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-legacy-util", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-util", + "repository_download_url": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-legacy-util/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-legacy-util@1.0.0" + } }, { "purl": "pkg:npm/grunt-lib-phantomjs@0.6.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-lib-phantomjs", + "version": "0.6.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.6.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-lib-phantomjs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-lib-phantomjs", + "repository_download_url": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.6.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-lib-phantomjs/0.6.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-lib-phantomjs@0.6.0" + } }, { "purl": "pkg:npm/grunt-saucelabs@9.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "9.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "grunt-saucelabs", + "version": "9.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/grunt-saucelabs/-/grunt-saucelabs-9.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "grunt-saucelabs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/grunt-saucelabs", + "repository_download_url": "https://registry.npmjs.org/grunt-saucelabs/-/grunt-saucelabs-9.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/grunt-saucelabs/9.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/grunt-saucelabs@9.0.0" + } }, { "purl": "pkg:npm/gzip-size@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "gzip-size", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "gzip-size", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/gzip-size", + "repository_download_url": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/gzip-size/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/gzip-size@1.0.0" + } }, { "purl": "pkg:npm/har-validator@2.0.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "har-validator", + "version": "2.0.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "har-validator", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/har-validator", + "repository_download_url": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "api_data_url": "https://registry.npmjs.org/har-validator/2.0.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/har-validator@2.0.6" + } }, { "purl": "pkg:npm/has-ansi@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "has-ansi", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "has-ansi", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/has-ansi", + "repository_download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/has-ansi/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/has-ansi@2.0.0" + } }, { "purl": "pkg:npm/has-color@0.1.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "has-color", + "version": "0.1.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "has-color", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/has-color", + "repository_download_url": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "api_data_url": "https://registry.npmjs.org/has-color/0.1.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/has-color@0.1.7" + } }, { "purl": "pkg:npm/hasha@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "hasha", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "hasha", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/hasha", + "repository_download_url": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/hasha/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/hasha@2.2.0" + } }, { "purl": "pkg:npm/hawk@3.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "hawk", + "version": "3.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "hawk", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/hawk", + "repository_download_url": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/hawk/3.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/hawk@3.1.3" + } }, { "purl": "pkg:npm/he@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "he", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/he/-/he-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "he", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/he", + "repository_download_url": "https://registry.npmjs.org/he/-/he-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/he/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/he@1.1.0" + } }, { "purl": "pkg:npm/header-case@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "header-case", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/header-case/-/header-case-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "header-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/header-case", + "repository_download_url": "https://registry.npmjs.org/header-case/-/header-case-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/header-case/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/header-case@1.0.0" + } }, { "purl": "pkg:npm/hoek@2.16.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.16.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "hoek", + "version": "2.16.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "hoek", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/hoek", + "repository_download_url": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "api_data_url": "https://registry.npmjs.org/hoek/2.16.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/hoek@2.16.3" + } }, { "purl": "pkg:npm/hooker@0.2.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "hooker", + "version": "0.2.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "hooker", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/hooker", + "repository_download_url": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "api_data_url": "https://registry.npmjs.org/hooker/0.2.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/hooker@0.2.3" + } }, { "purl": "pkg:npm/hosted-git-info@2.1.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "hosted-git-info", + "version": "2.1.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "hosted-git-info", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/hosted-git-info", + "repository_download_url": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "api_data_url": "https://registry.npmjs.org/hosted-git-info/2.1.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/hosted-git-info@2.1.5" + } }, { "purl": "pkg:npm/html-minifier@2.1.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "html-minifier", + "version": "2.1.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "html-minifier", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/html-minifier", + "repository_download_url": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", + "api_data_url": "https://registry.npmjs.org/html-minifier/2.1.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/html-minifier@2.1.7" + } }, { "purl": "pkg:npm/htmlparser2@3.8.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.8.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "htmlparser2", + "version": "3.8.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "htmlparser2", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/htmlparser2", + "repository_download_url": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "api_data_url": "https://registry.npmjs.org/htmlparser2/3.8.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/htmlparser2@3.8.3" + } }, { "purl": "pkg:npm/http-errors@1.5.0", - "extracted_requirement": null, + "extracted_requirement": "1.5.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "http-errors", + "version": "1.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "http-errors", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/http-errors", + "repository_download_url": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", + "api_data_url": "https://registry.npmjs.org/http-errors/1.5.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/http-errors@1.5.0" + } }, { "purl": "pkg:npm/http-signature@1.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "http-signature", + "version": "1.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "http-signature", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/http-signature", + "repository_download_url": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/http-signature/1.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/http-signature@1.1.1" + } }, { "purl": "pkg:npm/http2@3.3.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "http2", + "version": "3.3.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/http2/-/http2-3.3.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "http2", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/http2", + "repository_download_url": "https://registry.npmjs.org/http2/-/http2-3.3.4.tgz", + "api_data_url": "https://registry.npmjs.org/http2/3.3.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/http2@3.3.4" + } }, { "purl": "pkg:npm/https-proxy-agent@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "https-proxy-agent", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "https-proxy-agent", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/https-proxy-agent", + "repository_download_url": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/https-proxy-agent/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/https-proxy-agent@1.0.0" + } }, { "purl": "pkg:npm/i@0.3.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "i", + "version": "0.3.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "i", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/i", + "repository_download_url": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", + "api_data_url": "https://registry.npmjs.org/i/0.3.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/i@0.3.5" + } }, { "purl": "pkg:npm/iconv-lite@0.4.13", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "iconv-lite", + "version": "0.4.13", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "iconv-lite", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/iconv-lite", + "repository_download_url": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "api_data_url": "https://registry.npmjs.org/iconv-lite/0.4.13", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/iconv-lite@0.4.13" + } }, { "purl": "pkg:npm/image-size@0.4.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "image-size", + "version": "0.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "image-size", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/image-size", + "repository_download_url": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", + "api_data_url": "https://registry.npmjs.org/image-size/0.4.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/image-size@0.4.0" + } }, { "purl": "pkg:npm/indent-string@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "indent-string", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "indent-string", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/indent-string", + "repository_download_url": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/indent-string/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/indent-string@2.1.0" + } }, { "purl": "pkg:npm/inflight@1.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "inflight", + "version": "1.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "inflight", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/inflight", + "repository_download_url": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/inflight/1.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/inflight@1.0.5" + } }, { "purl": "pkg:npm/inherit@2.2.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "inherit", + "version": "2.2.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/inherit/-/inherit-2.2.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "inherit", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/inherit", + "repository_download_url": "https://registry.npmjs.org/inherit/-/inherit-2.2.4.tgz", + "api_data_url": "https://registry.npmjs.org/inherit/2.2.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/inherit@2.2.4" + } }, { "purl": "pkg:npm/inherits@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "inherits", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "inherits", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/inherits", + "repository_download_url": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/inherits/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/inherits@2.0.1" + } }, { "purl": "pkg:npm/interpret@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "interpret", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "interpret", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/interpret", + "repository_download_url": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/interpret/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/interpret@1.0.1" + } }, { "purl": "pkg:npm/is-arrayish@0.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-arrayish", + "version": "0.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-arrayish", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-arrayish", + "repository_download_url": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/is-arrayish/0.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-arrayish@0.2.1" + } }, { "purl": "pkg:npm/is-buffer@1.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-buffer", + "version": "1.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-buffer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-buffer", + "repository_download_url": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/is-buffer/1.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-buffer@1.1.3" + } }, { "purl": "pkg:npm/is-builtin-module@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-builtin-module", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-builtin-module", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-builtin-module", + "repository_download_url": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-builtin-module/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-builtin-module@1.0.0" + } }, { "purl": "pkg:npm/is-expression@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-expression", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-expression/-/is-expression-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-expression", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-expression", + "repository_download_url": "https://registry.npmjs.org/is-expression/-/is-expression-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/is-expression/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-expression@2.0.1" + } }, { "purl": "pkg:npm/is-finite@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-finite", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-finite", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-finite", + "repository_download_url": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/is-finite/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-finite@1.0.1" + } }, { "purl": "pkg:npm/is-lower-case@1.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-lower-case", + "version": "1.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-lower-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-lower-case", + "repository_download_url": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/is-lower-case/1.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-lower-case@1.1.3" + } }, { "purl": "pkg:npm/is-my-json-valid@2.13.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.13.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-my-json-valid", + "version": "2.13.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-my-json-valid", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-my-json-valid", + "repository_download_url": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz", + "api_data_url": "https://registry.npmjs.org/is-my-json-valid/2.13.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-my-json-valid@2.13.1" + } }, { "purl": "pkg:npm/is-promise@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-promise", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-promise", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-promise", + "repository_download_url": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-promise/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-promise@2.1.0" + } }, { "purl": "pkg:npm/is-property@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-property", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-property", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-property", + "repository_download_url": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/is-property/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-property@1.0.2" + } }, { "purl": "pkg:npm/is-regex@1.0.3", - "extracted_requirement": null, + "extracted_requirement": "1.0.3", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-regex", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-regex", + "repository_download_url": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/is-regex/1.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-regex@1.0.3" + } }, { "purl": "pkg:npm/is-stream@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-stream", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-stream", + "repository_download_url": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-stream/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-stream@1.1.0" + } }, { "purl": "pkg:npm/is-typedarray@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-typedarray", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-typedarray", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-typedarray", + "repository_download_url": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-typedarray/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-typedarray@1.0.0" + } }, { "purl": "pkg:npm/is-upper-case@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-upper-case", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-upper-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-upper-case", + "repository_download_url": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/is-upper-case/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-upper-case@1.1.2" + } }, { "purl": "pkg:npm/is-utf8@0.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-utf8", + "version": "0.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-utf8", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-utf8", + "repository_download_url": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/is-utf8/0.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/is-utf8@0.2.1" + } }, { "purl": "pkg:npm/isarray@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "isarray", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "isarray", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/isarray", + "repository_download_url": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/isarray/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/isarray@1.0.0" + } }, { "purl": "pkg:npm/isexe@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "isexe", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "isexe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/isexe", + "repository_download_url": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/isexe/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/isexe@1.1.2" + } }, { "purl": "pkg:npm/isstream@0.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "isstream", + "version": "0.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "isstream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/isstream", + "repository_download_url": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/isstream/0.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/isstream@0.1.2" + } }, { "purl": "pkg:npm/jodid25519@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jodid25519", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jodid25519", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jodid25519", + "repository_download_url": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/jodid25519/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jodid25519@1.0.2" + } }, { "purl": "pkg:npm/js-base64@2.1.9", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "js-base64", + "version": "2.1.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "js-base64", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/js-base64", + "repository_download_url": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "api_data_url": "https://registry.npmjs.org/js-base64/2.1.9", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/js-base64@2.1.9" + } }, { "purl": "pkg:npm/js-stringify@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "js-stringify", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "js-stringify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/js-stringify", + "repository_download_url": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/js-stringify/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/js-stringify@1.0.2" + } }, { "purl": "pkg:npm/js-yaml@3.5.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.5.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "js-yaml", + "version": "3.5.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "js-yaml", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/js-yaml", + "repository_download_url": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", + "api_data_url": "https://registry.npmjs.org/js-yaml/3.5.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/js-yaml@3.5.5" + } }, { "purl": "pkg:npm/jsbn@0.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsbn", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsbn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsbn", + "repository_download_url": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/jsbn/0.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsbn@0.1.0" + } }, { "purl": "pkg:npm/jscs@3.0.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jscs", + "version": "3.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jscs/-/jscs-3.0.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jscs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jscs", + "repository_download_url": "https://registry.npmjs.org/jscs/-/jscs-3.0.7.tgz", + "api_data_url": "https://registry.npmjs.org/jscs/3.0.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jscs@3.0.7" + } }, { "purl": "pkg:npm/jscs-jsdoc@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jscs-jsdoc", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jscs-jsdoc", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jscs-jsdoc", + "repository_download_url": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/jscs-jsdoc/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jscs-jsdoc@2.0.0" + } }, { "purl": "pkg:npm/jscs-preset-wikimedia@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jscs-preset-wikimedia", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jscs-preset-wikimedia", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jscs-preset-wikimedia", + "repository_download_url": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/jscs-preset-wikimedia/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jscs-preset-wikimedia@1.0.0" + } }, { "purl": "pkg:npm/jsdoctypeparser@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsdoctypeparser", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsdoctypeparser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsdoctypeparser", + "repository_download_url": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/jsdoctypeparser/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsdoctypeparser@1.2.0" + } }, { "purl": "pkg:npm/jshint@2.9.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.9.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jshint", + "version": "2.9.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jshint/-/jshint-2.9.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jshint", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jshint", + "repository_download_url": "https://registry.npmjs.org/jshint/-/jshint-2.9.2.tgz", + "api_data_url": "https://registry.npmjs.org/jshint/2.9.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jshint@2.9.2" + } }, { "purl": "pkg:npm/json-schema@0.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "json-schema", + "version": "0.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "json-schema", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/json-schema", + "repository_download_url": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/json-schema/0.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/json-schema@0.2.2" + } }, { "purl": "pkg:npm/json-stringify-safe@5.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "json-stringify-safe", + "version": "5.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "json-stringify-safe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/json-stringify-safe", + "repository_download_url": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/json-stringify-safe/5.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/json-stringify-safe@5.0.1" + } }, { "purl": "pkg:npm/jsonfile@2.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsonfile", + "version": "2.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsonfile", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsonfile", + "repository_download_url": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/jsonfile/2.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsonfile@2.3.1" + } }, { "purl": "pkg:npm/jsonlint@1.6.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.6.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsonlint", + "version": "1.6.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsonlint", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsonlint", + "repository_download_url": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "api_data_url": "https://registry.npmjs.org/jsonlint/1.6.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsonlint@1.6.2" + } }, { "purl": "pkg:npm/jsonpointer@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsonpointer", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsonpointer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsonpointer", + "repository_download_url": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/jsonpointer/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsonpointer@2.0.0" + } }, { "purl": "pkg:npm/jsprim@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jsprim", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jsprim", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jsprim", + "repository_download_url": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/jsprim/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jsprim@1.3.0" + } }, { "purl": "pkg:npm/jstransformer@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "jstransformer", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "jstransformer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/jstransformer", + "repository_download_url": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/jstransformer/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/jstransformer@1.0.0" + } }, { "purl": "pkg:npm/JSV@4.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "JSV", + "version": "4.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "JSV", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/JSV", + "repository_download_url": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/JSV/4.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/JSV@4.0.2" + } }, { "purl": "pkg:npm/kew@0.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "kew", + "version": "0.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "kew", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/kew", + "repository_download_url": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/kew/0.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/kew@0.7.0" + } }, { "purl": "pkg:npm/kind-of@3.0.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "kind-of", + "version": "3.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "kind-of", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/kind-of", + "repository_download_url": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/kind-of/3.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/kind-of@3.0.3" + } }, { "purl": "pkg:npm/klaw@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "klaw", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/klaw/-/klaw-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "klaw", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/klaw", + "repository_download_url": "https://registry.npmjs.org/klaw/-/klaw-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/klaw/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/klaw@1.3.0" + } }, { "purl": "pkg:npm/lazy-cache@1.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lazy-cache", + "version": "1.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lazy-cache", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lazy-cache", + "repository_download_url": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/lazy-cache/1.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lazy-cache@1.0.4" + } }, { "purl": "pkg:npm/lazystream@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lazystream", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lazystream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lazystream", + "repository_download_url": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/lazystream/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lazystream@1.0.0" + } }, { "purl": "pkg:npm/less@2.6.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "less", + "version": "2.6.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/less/-/less-2.6.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "less", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/less", + "repository_download_url": "https://registry.npmjs.org/less/-/less-2.6.1.tgz", + "api_data_url": "https://registry.npmjs.org/less/2.6.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/less@2.6.1" + } }, { "purl": "pkg:npm/linkify-it@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "linkify-it", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "linkify-it", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/linkify-it", + "repository_download_url": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/linkify-it/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/linkify-it@2.0.0" + } }, { "purl": "pkg:npm/livereload-js@2.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "livereload-js", + "version": "2.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "livereload-js", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/livereload-js", + "repository_download_url": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/livereload-js/2.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/livereload-js@2.2.2" + } }, { "purl": "pkg:npm/load-grunt-tasks@3.5.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.5.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "load-grunt-tasks", + "version": "3.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "load-grunt-tasks", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/load-grunt-tasks", + "repository_download_url": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.0.tgz", + "api_data_url": "https://registry.npmjs.org/load-grunt-tasks/3.5.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/load-grunt-tasks@3.5.0" + } }, { "purl": "pkg:npm/load-json-file@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "load-json-file", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "load-json-file", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/load-json-file", + "repository_download_url": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/load-json-file/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/load-json-file@1.1.0" + } }, { "purl": "pkg:npm/lodash@3.10.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.10.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lodash", + "version": "3.10.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lodash", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lodash", + "repository_download_url": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "api_data_url": "https://registry.npmjs.org/lodash/3.10.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lodash@3.10.1" + } }, { "purl": "pkg:npm/longest@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "longest", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "longest", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/longest", + "repository_download_url": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/longest/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/longest@1.0.1" + } }, { "purl": "pkg:npm/loud-rejection@1.6.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.6.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "loud-rejection", + "version": "1.6.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "loud-rejection", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/loud-rejection", + "repository_download_url": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "api_data_url": "https://registry.npmjs.org/loud-rejection/1.6.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/loud-rejection@1.6.0" + } }, { "purl": "pkg:npm/lower-case@1.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lower-case", + "version": "1.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lower-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lower-case", + "repository_download_url": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/lower-case/1.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lower-case@1.1.3" + } }, { "purl": "pkg:npm/lower-case-first@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lower-case-first", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lower-case-first", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lower-case-first", + "repository_download_url": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/lower-case-first/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lower-case-first@1.0.2" + } }, { "purl": "pkg:npm/lru-cache@2.7.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.7.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "lru-cache", + "version": "2.7.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "lru-cache", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/lru-cache", + "repository_download_url": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "api_data_url": "https://registry.npmjs.org/lru-cache/2.7.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/lru-cache@2.7.3" + } }, { "purl": "pkg:npm/map-obj@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "map-obj", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "map-obj", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/map-obj", + "repository_download_url": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/map-obj/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/map-obj@1.0.1" + } }, { "purl": "pkg:npm/markdown-it@7.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "markdown-it", + "version": "7.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/markdown-it/-/markdown-it-7.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "markdown-it", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/markdown-it", + "repository_download_url": "https://registry.npmjs.org/markdown-it/-/markdown-it-7.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/markdown-it/7.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/markdown-it@7.0.0" + } }, { "purl": "pkg:npm/maxmin@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "maxmin", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "maxmin", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/maxmin", + "repository_download_url": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/maxmin/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/maxmin@1.1.0" + } }, { "purl": "pkg:npm/mdurl@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mdurl", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mdurl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mdurl", + "repository_download_url": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/mdurl/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mdurl@1.0.1" + } }, { "purl": "pkg:npm/media-typer@0.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "media-typer", + "version": "0.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "media-typer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/media-typer", + "repository_download_url": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/media-typer/0.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/media-typer@0.3.0" + } }, { "purl": "pkg:npm/meow@3.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "meow", + "version": "3.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "meow", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/meow", + "repository_download_url": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/meow/3.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/meow@3.7.0" + } }, { "purl": "pkg:npm/mime@1.3.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mime", + "version": "1.3.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mime", + "repository_download_url": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "api_data_url": "https://registry.npmjs.org/mime/1.3.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mime@1.3.4" + } }, { "purl": "pkg:npm/mime-db@1.23.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.23.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mime-db", + "version": "1.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mime-db", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mime-db", + "repository_download_url": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/mime-db/1.23.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mime-db@1.23.0" + } }, { "purl": "pkg:npm/mime-types@2.1.11", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.11", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mime-types", + "version": "2.1.11", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mime-types", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mime-types", + "repository_download_url": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "api_data_url": "https://registry.npmjs.org/mime-types/2.1.11", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mime-types@2.1.11" + } }, { "purl": "pkg:npm/minimatch@3.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "minimatch", + "version": "3.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "minimatch", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/minimatch", + "repository_download_url": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/minimatch/3.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/minimatch@3.0.2" + } }, { "purl": "pkg:npm/minimist@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "minimist", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "minimist", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/minimist", + "repository_download_url": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/minimist/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/minimist@1.2.0" + } }, { "purl": "pkg:npm/mkdirp@0.5.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mkdirp", + "version": "0.5.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mkdirp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mkdirp", + "repository_download_url": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "api_data_url": "https://registry.npmjs.org/mkdirp/0.5.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mkdirp@0.5.1" + } }, { "purl": "pkg:npm/morgan@1.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "morgan", + "version": "1.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "morgan", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/morgan", + "repository_download_url": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/morgan/1.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/morgan@1.7.0" + } }, { "purl": "pkg:npm/ms@0.7.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ms", + "version": "0.7.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ms", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ms", + "repository_download_url": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "api_data_url": "https://registry.npmjs.org/ms/0.7.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ms@0.7.1" + } }, { "purl": "pkg:npm/multimatch@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "multimatch", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "multimatch", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/multimatch", + "repository_download_url": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/multimatch/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/multimatch@2.1.0" + } }, { "purl": "pkg:npm/mute-stream@0.0.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "mute-stream", + "version": "0.0.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "mute-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/mute-stream", + "repository_download_url": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "api_data_url": "https://registry.npmjs.org/mute-stream/0.0.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/mute-stream@0.0.6" + } }, { "purl": "pkg:npm/natural-compare@1.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "natural-compare", + "version": "1.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "natural-compare", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/natural-compare", + "repository_download_url": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/natural-compare/1.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/natural-compare@1.2.2" + } }, { "purl": "pkg:npm/ncname@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ncname", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ncname", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ncname", + "repository_download_url": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/ncname/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ncname@1.0.0" + } }, { "purl": "pkg:npm/ncp@0.4.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ncp", + "version": "0.4.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ncp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ncp", + "repository_download_url": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "api_data_url": "https://registry.npmjs.org/ncp/0.4.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/ncp@0.4.2" + } }, { "purl": "pkg:npm/negotiator@0.6.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "negotiator", + "version": "0.6.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "negotiator", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/negotiator", + "repository_download_url": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "api_data_url": "https://registry.npmjs.org/negotiator/0.6.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/negotiator@0.6.1" + } }, { "purl": "pkg:npm/no-case@2.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "no-case", + "version": "2.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/no-case/-/no-case-2.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "no-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/no-case", + "repository_download_url": "https://registry.npmjs.org/no-case/-/no-case-2.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/no-case/2.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/no-case@2.3.0" + } }, { "purl": "pkg:npm/node-int64@0.4.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "node-int64", + "version": "0.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node-int64", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/node-int64", + "repository_download_url": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "api_data_url": "https://registry.npmjs.org/node-int64/0.4.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/node-int64@0.4.0" + } }, { "purl": "pkg:npm/node-uuid@1.4.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.4.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "node-uuid", + "version": "1.4.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node-uuid", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/node-uuid", + "repository_download_url": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "api_data_url": "https://registry.npmjs.org/node-uuid/1.4.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/node-uuid@1.4.7" + } }, { "purl": "pkg:npm/nomnom@1.8.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.8.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "nomnom", + "version": "1.8.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "nomnom", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/nomnom", + "repository_download_url": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "api_data_url": "https://registry.npmjs.org/nomnom/1.8.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/nomnom@1.8.1" + } }, { "purl": "pkg:npm/nopt@3.0.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "nopt", + "version": "3.0.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "nopt", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/nopt", + "repository_download_url": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "api_data_url": "https://registry.npmjs.org/nopt/3.0.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/nopt@3.0.6" + } }, { "purl": "pkg:npm/normalize-package-data@2.3.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "normalize-package-data", + "version": "2.3.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "normalize-package-data", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/normalize-package-data", + "repository_download_url": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "api_data_url": "https://registry.npmjs.org/normalize-package-data/2.3.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/normalize-package-data@2.3.5" + } }, { "purl": "pkg:npm/normalize-path@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "normalize-path", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "normalize-path", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/normalize-path", + "repository_download_url": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/normalize-path/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/normalize-path@2.0.1" + } }, { "purl": "pkg:npm/num2fraction@1.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "num2fraction", + "version": "1.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "num2fraction", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/num2fraction", + "repository_download_url": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/num2fraction/1.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/num2fraction@1.2.2" + } }, { "purl": "pkg:npm/number-is-nan@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "number-is-nan", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "number-is-nan", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/number-is-nan", + "repository_download_url": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/number-is-nan/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/number-is-nan@1.0.0" + } }, { "purl": "pkg:npm/oauth-sign@0.8.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.8.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "oauth-sign", + "version": "0.8.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "oauth-sign", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/oauth-sign", + "repository_download_url": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "api_data_url": "https://registry.npmjs.org/oauth-sign/0.8.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/oauth-sign@0.8.2" + } }, { "purl": "pkg:npm/object-assign@4.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "object-assign", + "version": "4.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "object-assign", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/object-assign", + "repository_download_url": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/object-assign/4.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/object-assign@4.1.0" + } }, { "purl": "pkg:npm/on-finished@2.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "on-finished", + "version": "2.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "on-finished", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/on-finished", + "repository_download_url": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/on-finished/2.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/on-finished@2.3.0" + } }, { "purl": "pkg:npm/on-headers@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "on-headers", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "on-headers", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/on-headers", + "repository_download_url": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/on-headers/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/on-headers@1.0.1" + } }, { "purl": "pkg:npm/once@1.3.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "once", + "version": "1.3.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "once", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/once", + "repository_download_url": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "api_data_url": "https://registry.npmjs.org/once/1.3.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/once@1.3.3" + } }, { "purl": "pkg:npm/opn@4.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "opn", + "version": "4.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "opn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/opn", + "repository_download_url": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/opn/4.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/opn@4.0.2" + } }, { "purl": "pkg:npm/os-tmpdir@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "os-tmpdir", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "os-tmpdir", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/os-tmpdir", + "repository_download_url": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/os-tmpdir/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/os-tmpdir@1.0.1" + } }, { "purl": "pkg:npm/package@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "package", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "package", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/package", + "repository_download_url": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/package/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/package@1.0.1" + } }, { "purl": "pkg:npm/pako@0.2.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pako", + "version": "0.2.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pako/-/pako-0.2.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pako", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pako", + "repository_download_url": "https://registry.npmjs.org/pako/-/pako-0.2.8.tgz", + "api_data_url": "https://registry.npmjs.org/pako/0.2.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pako@0.2.8" + } }, { "purl": "pkg:npm/param-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "param-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/param-case/-/param-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "param-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/param-case", + "repository_download_url": "https://registry.npmjs.org/param-case/-/param-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/param-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/param-case@2.1.0" + } }, { "purl": "pkg:npm/parse-json@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "parse-json", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "parse-json", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/parse-json", + "repository_download_url": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/parse-json/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/parse-json@2.2.0" + } }, { "purl": "pkg:npm/parse-ms@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "parse-ms", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "parse-ms", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/parse-ms", + "repository_download_url": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/parse-ms/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/parse-ms@1.0.1" + } }, { "purl": "pkg:npm/parserlib@0.2.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "parserlib", + "version": "0.2.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "parserlib", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/parserlib", + "repository_download_url": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", + "api_data_url": "https://registry.npmjs.org/parserlib/0.2.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/parserlib@0.2.5" + } }, { "purl": "pkg:npm/parseurl@1.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "parseurl", + "version": "1.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "parseurl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/parseurl", + "repository_download_url": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/parseurl/1.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/parseurl@1.3.1" + } }, { "purl": "pkg:npm/pascal-case@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pascal-case", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pascal-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pascal-case", + "repository_download_url": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/pascal-case/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pascal-case@2.0.0" + } }, { "purl": "pkg:npm/path-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "path-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/path-case/-/path-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "path-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/path-case", + "repository_download_url": "https://registry.npmjs.org/path-case/-/path-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/path-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/path-case@2.1.0" + } }, { "purl": "pkg:npm/path-exists@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "path-exists", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "path-exists", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/path-exists", + "repository_download_url": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/path-exists/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/path-exists@2.1.0" + } }, { "purl": "pkg:npm/path-is-absolute@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "path-is-absolute", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "path-is-absolute", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/path-is-absolute", + "repository_download_url": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/path-is-absolute/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/path-is-absolute@1.0.0" + } }, { "purl": "pkg:npm/path-type@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "path-type", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "path-type", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/path-type", + "repository_download_url": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/path-type/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/path-type@1.1.0" + } }, { "purl": "pkg:npm/pathval@0.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pathval", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pathval", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pathval", + "repository_download_url": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/pathval/0.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pathval@0.1.1" + } }, { "purl": "pkg:npm/pend@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pend", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pend", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pend", + "repository_download_url": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/pend/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pend@1.2.0" + } }, { "purl": "pkg:npm/phantomjs@1.9.20", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.9.20", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "phantomjs", + "version": "1.9.20", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "phantomjs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/phantomjs", + "repository_download_url": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", + "api_data_url": "https://registry.npmjs.org/phantomjs/1.9.20", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/phantomjs@1.9.20" + } }, { "purl": "pkg:npm/pify@2.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pify", + "version": "2.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pify", + "repository_download_url": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/pify/2.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pify@2.3.0" + } }, { "purl": "pkg:npm/pinkie@2.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pinkie", + "version": "2.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pinkie", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pinkie", + "repository_download_url": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/pinkie/2.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pinkie@2.0.4" + } }, { "purl": "pkg:npm/pinkie-promise@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pinkie-promise", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pinkie-promise", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pinkie-promise", + "repository_download_url": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pinkie-promise/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pinkie-promise@2.0.1" + } }, { "purl": "pkg:npm/pkg-up@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pkg-up", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pkg-up", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pkg-up", + "repository_download_url": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/pkg-up/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pkg-up@1.0.0" + } }, { "purl": "pkg:npm/pkginfo@0.4.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pkginfo", + "version": "0.4.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pkginfo", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pkginfo", + "repository_download_url": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", + "api_data_url": "https://registry.npmjs.org/pkginfo/0.4.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pkginfo@0.4.0" + } }, { "purl": "pkg:npm/plur@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "plur", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "plur", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/plur", + "repository_download_url": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/plur/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/plur@1.0.0" + } }, { "purl": "pkg:npm/portscanner@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "portscanner", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/portscanner/-/portscanner-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "portscanner", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/portscanner", + "repository_download_url": "https://registry.npmjs.org/portscanner/-/portscanner-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/portscanner/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/portscanner@1.0.0" + } }, { "purl": "pkg:npm/postcss@4.1.16", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.1.16", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "postcss", + "version": "4.1.16", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "postcss", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/postcss", + "repository_download_url": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", + "api_data_url": "https://registry.npmjs.org/postcss/4.1.16", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/postcss@4.1.16" + } }, { "purl": "pkg:npm/pretty-bytes@3.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pretty-bytes", + "version": "3.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pretty-bytes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pretty-bytes", + "repository_download_url": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pretty-bytes/3.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pretty-bytes@3.0.1" + } }, { "purl": "pkg:npm/pretty-ms@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pretty-ms", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pretty-ms", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pretty-ms", + "repository_download_url": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/pretty-ms/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pretty-ms@2.1.0" + } }, { "purl": "pkg:npm/process-nextick-args@1.0.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "process-nextick-args", + "version": "1.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "process-nextick-args", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/process-nextick-args", + "repository_download_url": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "api_data_url": "https://registry.npmjs.org/process-nextick-args/1.0.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/process-nextick-args@1.0.7" + } }, { "purl": "pkg:npm/progress@1.1.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "progress", + "version": "1.1.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "progress", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/progress", + "repository_download_url": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "api_data_url": "https://registry.npmjs.org/progress/1.1.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/progress@1.1.8" + } }, { "purl": "pkg:npm/promise@7.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "7.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "promise", + "version": "7.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "promise", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/promise", + "repository_download_url": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/promise/7.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/promise@7.1.1" + } }, { "purl": "pkg:npm/prompt@0.2.14", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "prompt", + "version": "0.2.14", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "prompt", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/prompt", + "repository_download_url": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "api_data_url": "https://registry.npmjs.org/prompt/0.2.14", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/prompt@0.2.14" + } }, { "purl": "pkg:npm/prr@0.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "prr", + "version": "0.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "prr", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/prr", + "repository_download_url": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/prr/0.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/prr@0.0.0" + } }, { "purl": "pkg:npm/pug@2.0.0-beta3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.0-beta3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug", + "version": "2.0.0-beta3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug", + "repository_download_url": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta3.tgz", + "api_data_url": "https://registry.npmjs.org/pug/2.0.0-beta3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug@2.0.0-beta3" + } }, { "purl": "pkg:npm/pug-attrs@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-attrs", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-attrs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-attrs", + "repository_download_url": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pug-attrs/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-attrs@2.0.1" + } }, { "purl": "pkg:npm/pug-code-gen@0.0.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-code-gen", + "version": "0.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-0.0.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-code-gen", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-code-gen", + "repository_download_url": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-0.0.7.tgz", + "api_data_url": "https://registry.npmjs.org/pug-code-gen/0.0.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-code-gen@0.0.7" + } }, { "purl": "pkg:npm/pug-error@1.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-error", + "version": "1.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-error", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-error", + "repository_download_url": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/pug-error/1.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-error@1.3.1" + } }, { "purl": "pkg:npm/pug-filters@1.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-filters", + "version": "1.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-filters/-/pug-filters-1.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-filters", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-filters", + "repository_download_url": "https://registry.npmjs.org/pug-filters/-/pug-filters-1.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/pug-filters/1.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-filters@1.2.2" + } }, { "purl": "pkg:npm/pug-lexer@2.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-lexer", + "version": "2.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-2.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-lexer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-lexer", + "repository_download_url": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-2.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/pug-lexer/2.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-lexer@2.0.2" + } }, { "purl": "pkg:npm/pug-linker@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-linker", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-linker/-/pug-linker-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-linker", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-linker", + "repository_download_url": "https://registry.npmjs.org/pug-linker/-/pug-linker-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/pug-linker/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-linker@1.0.0" + } }, { "purl": "pkg:npm/pug-load@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-load", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-load", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-load", + "repository_download_url": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/pug-load/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-load@2.0.0" + } }, { "purl": "pkg:npm/pug-parser@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-parser", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-parser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-parser", + "repository_download_url": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pug-parser/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-parser@2.0.1" + } }, { "purl": "pkg:npm/pug-runtime@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-runtime", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-runtime", + "repository_download_url": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pug-runtime/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-runtime@2.0.1" + } }, { "purl": "pkg:npm/pug-strip-comments@0.0.1", - "extracted_requirement": null, + "extracted_requirement": "0.0.1", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-strip-comments", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-0.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-strip-comments", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-strip-comments", + "repository_download_url": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/pug-strip-comments/0.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-strip-comments@0.0.1" + } }, { "purl": "pkg:npm/pug-walk@0.0.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "pug-walk", + "version": "0.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/pug-walk/-/pug-walk-0.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "pug-walk", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/pug-walk", + "repository_download_url": "https://registry.npmjs.org/pug-walk/-/pug-walk-0.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/pug-walk/0.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/pug-walk@0.0.3" + } }, { "purl": "pkg:npm/q@1.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "q", + "version": "1.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "q", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/q", + "repository_download_url": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/q/1.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/q@1.4.1" + } }, { "purl": "pkg:npm/qs@6.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "6.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "qs", + "version": "6.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "qs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/qs", + "repository_download_url": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/qs/6.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/qs@6.2.0" + } }, { "purl": "pkg:npm/range-parser@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "range-parser", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "range-parser", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/range-parser", + "repository_download_url": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/range-parser/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/range-parser@1.2.0" + } }, { "purl": "pkg:npm/raw-body@2.1.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "raw-body", + "version": "2.1.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "raw-body", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/raw-body", + "repository_download_url": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "api_data_url": "https://registry.npmjs.org/raw-body/2.1.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/raw-body@2.1.7" + } }, { "purl": "pkg:npm/read@1.0.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "read", + "version": "1.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "read", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/read", + "repository_download_url": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "api_data_url": "https://registry.npmjs.org/read/1.0.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/read@1.0.7" + } }, { "purl": "pkg:npm/read-pkg@1.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "read-pkg", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "read-pkg", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/read-pkg", + "repository_download_url": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/read-pkg/1.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/read-pkg@1.1.0" + } }, { "purl": "pkg:npm/read-pkg-up@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "read-pkg-up", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "read-pkg-up", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/read-pkg-up", + "repository_download_url": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/read-pkg-up/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/read-pkg-up@1.0.1" + } }, { "purl": "pkg:npm/readable-stream@2.1.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "readable-stream", + "version": "2.1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "readable-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/readable-stream", + "repository_download_url": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.4.tgz", + "api_data_url": "https://registry.npmjs.org/readable-stream/2.1.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/readable-stream@2.1.4" + } }, { "purl": "pkg:npm/rechoir@0.6.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "rechoir", + "version": "0.6.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "rechoir", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/rechoir", + "repository_download_url": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "api_data_url": "https://registry.npmjs.org/rechoir/0.6.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/rechoir@0.6.2" + } }, { "purl": "pkg:npm/redent@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "redent", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "redent", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/redent", + "repository_download_url": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/redent/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/redent@1.0.0" + } }, { "purl": "pkg:npm/regenerator-runtime@0.9.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.9.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "regenerator-runtime", + "version": "0.9.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "regenerator-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/regenerator-runtime", + "repository_download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz", + "api_data_url": "https://registry.npmjs.org/regenerator-runtime/0.9.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/regenerator-runtime@0.9.5" + } }, { "purl": "pkg:npm/relateurl@0.2.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "relateurl", + "version": "0.2.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "relateurl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/relateurl", + "repository_download_url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.6.tgz", + "api_data_url": "https://registry.npmjs.org/relateurl/0.2.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/relateurl@0.2.6" + } }, { "purl": "pkg:npm/repeat-string@1.5.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.5.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "repeat-string", + "version": "1.5.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "repeat-string", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/repeat-string", + "repository_download_url": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz", + "api_data_url": "https://registry.npmjs.org/repeat-string/1.5.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/repeat-string@1.5.4" + } }, { "purl": "pkg:npm/repeating@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "repeating", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "repeating", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/repeating", + "repository_download_url": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/repeating/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/repeating@2.0.1" + } }, { "purl": "pkg:npm/request@2.73.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.73.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "request", + "version": "2.73.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/request/-/request-2.73.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "request", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/request", + "repository_download_url": "https://registry.npmjs.org/request/-/request-2.73.0.tgz", + "api_data_url": "https://registry.npmjs.org/request/2.73.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/request@2.73.0" + } }, { "purl": "pkg:npm/request-progress@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "request-progress", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "request-progress", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/request-progress", + "repository_download_url": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/request-progress/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/request-progress@2.0.1" + } }, { "purl": "pkg:npm/requestretry@1.9.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.9.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "requestretry", + "version": "1.9.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/requestretry/-/requestretry-1.9.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "requestretry", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/requestretry", + "repository_download_url": "https://registry.npmjs.org/requestretry/-/requestretry-1.9.0.tgz", + "api_data_url": "https://registry.npmjs.org/requestretry/1.9.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/requestretry@1.9.0" + } }, { "purl": "pkg:npm/reserved-words@0.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "reserved-words", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "reserved-words", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/reserved-words", + "repository_download_url": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/reserved-words/0.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/reserved-words@0.1.1" + } }, { "purl": "pkg:npm/resolve@1.1.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "resolve", + "version": "1.1.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "resolve", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/resolve", + "repository_download_url": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "api_data_url": "https://registry.npmjs.org/resolve/1.1.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/resolve@1.1.7" + } }, { "purl": "pkg:npm/resolve-from@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "resolve-from", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "resolve-from", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/resolve-from", + "repository_download_url": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/resolve-from/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/resolve-from@2.0.0" + } }, { "purl": "pkg:npm/resolve-pkg@0.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "resolve-pkg", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "resolve-pkg", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/resolve-pkg", + "repository_download_url": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/resolve-pkg/0.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/resolve-pkg@0.1.0" + } }, { "purl": "pkg:npm/revalidator@0.1.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "revalidator", + "version": "0.1.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "revalidator", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/revalidator", + "repository_download_url": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "api_data_url": "https://registry.npmjs.org/revalidator/0.1.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/revalidator@0.1.8" + } }, { "purl": "pkg:npm/right-align@0.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "right-align", + "version": "0.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "right-align", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/right-align", + "repository_download_url": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/right-align/0.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/right-align@0.1.3" + } }, { "purl": "pkg:npm/rimraf@2.2.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "rimraf", + "version": "2.2.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "rimraf", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/rimraf", + "repository_download_url": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "api_data_url": "https://registry.npmjs.org/rimraf/2.2.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/rimraf@2.2.8" + } }, { "purl": "pkg:npm/sauce-tunnel@2.5.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.5.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sauce-tunnel", + "version": "2.5.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sauce-tunnel/-/sauce-tunnel-2.5.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sauce-tunnel", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sauce-tunnel", + "repository_download_url": "https://registry.npmjs.org/sauce-tunnel/-/sauce-tunnel-2.5.0.tgz", + "api_data_url": "https://registry.npmjs.org/sauce-tunnel/2.5.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sauce-tunnel@2.5.0" + } }, { "purl": "pkg:npm/saucelabs@1.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "saucelabs", + "version": "1.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "saucelabs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/saucelabs", + "repository_download_url": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/saucelabs/1.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/saucelabs@1.2.0" + } }, { "purl": "pkg:npm/semver@5.2.0", - "extracted_requirement": null, + "extracted_requirement": "5.2.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "semver", + "version": "5.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/semver/-/semver-5.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "semver", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/semver", + "repository_download_url": "https://registry.npmjs.org/semver/-/semver-5.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/semver/5.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/semver@5.2.0" + } }, { "purl": "pkg:npm/send@0.14.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.14.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "send", + "version": "0.14.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "send", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/send", + "repository_download_url": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", + "api_data_url": "https://registry.npmjs.org/send/0.14.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/send@0.14.1" + } }, { "purl": "pkg:npm/sentence-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sentence-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sentence-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sentence-case", + "repository_download_url": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/sentence-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sentence-case@2.1.0" + } }, { "purl": "pkg:npm/serve-index@1.8.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "serve-index", + "version": "1.8.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "serve-index", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/serve-index", + "repository_download_url": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", + "api_data_url": "https://registry.npmjs.org/serve-index/1.8.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/serve-index@1.8.0" + } }, { "purl": "pkg:npm/serve-static@1.11.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.11.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "serve-static", + "version": "1.11.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "serve-static", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/serve-static", + "repository_download_url": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", + "api_data_url": "https://registry.npmjs.org/serve-static/1.11.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/serve-static@1.11.1" + } }, { "purl": "pkg:npm/setprototypeof@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "setprototypeof", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "setprototypeof", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/setprototypeof", + "repository_download_url": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/setprototypeof/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/setprototypeof@1.0.1" + } }, { "purl": "pkg:npm/shelljs@0.7.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "shelljs", + "version": "0.7.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "shelljs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/shelljs", + "repository_download_url": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.0.tgz", + "api_data_url": "https://registry.npmjs.org/shelljs/0.7.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/shelljs@0.7.0" + } }, { "purl": "pkg:npm/shx@0.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "shx", + "version": "0.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/shx/-/shx-0.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "shx", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/shx", + "repository_download_url": "https://registry.npmjs.org/shx/-/shx-0.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/shx/0.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/shx@0.1.2" + } }, { "purl": "pkg:npm/sigmund@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sigmund", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sigmund", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sigmund", + "repository_download_url": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/sigmund/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sigmund@1.0.1" + } }, { "purl": "pkg:npm/signal-exit@3.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "signal-exit", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "signal-exit", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/signal-exit", + "repository_download_url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/signal-exit/3.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/signal-exit@3.0.0" + } }, { "purl": "pkg:npm/snake-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "snake-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "snake-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/snake-case", + "repository_download_url": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/snake-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/snake-case@2.1.0" + } }, { "purl": "pkg:npm/sntp@1.0.9", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sntp", + "version": "1.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sntp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sntp", + "repository_download_url": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/sntp/1.0.9", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sntp@1.0.9" + } }, { "purl": "pkg:npm/source-map@0.4.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "source-map", + "version": "0.4.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "source-map", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/source-map", + "repository_download_url": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "api_data_url": "https://registry.npmjs.org/source-map/0.4.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/source-map@0.4.4" + } }, { "purl": "pkg:npm/source-map-support@0.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "source-map-support", + "version": "0.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "source-map-support", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/source-map-support", + "repository_download_url": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/source-map-support/0.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/source-map-support@0.4.1" + } }, { "purl": "pkg:npm/spdx-correct@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "spdx-correct", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "spdx-correct", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/spdx-correct", + "repository_download_url": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/spdx-correct/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/spdx-correct@1.0.2" + } }, { "purl": "pkg:npm/spdx-exceptions@1.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "spdx-exceptions", + "version": "1.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "spdx-exceptions", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/spdx-exceptions", + "repository_download_url": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/spdx-exceptions/1.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/spdx-exceptions@1.0.5" + } }, { "purl": "pkg:npm/spdx-expression-parse@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "spdx-expression-parse", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "spdx-expression-parse", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/spdx-expression-parse", + "repository_download_url": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/spdx-expression-parse/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/spdx-expression-parse@1.0.2" + } }, { "purl": "pkg:npm/spdx-license-ids@1.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "spdx-license-ids", + "version": "1.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "spdx-license-ids", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/spdx-license-ids", + "repository_download_url": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/spdx-license-ids/1.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/spdx-license-ids@1.2.1" + } }, { "purl": "pkg:npm/split@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "split", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "split", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/split", + "repository_download_url": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/split/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/split@1.0.0" + } }, { "purl": "pkg:npm/sprintf-js@1.0.3", - "extracted_requirement": null, + "extracted_requirement": "1.0.3", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sprintf-js", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sprintf-js", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sprintf-js", + "repository_download_url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/sprintf-js/1.0.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sprintf-js@1.0.3" + } }, { "purl": "pkg:npm/sshpk@1.8.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.8.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "sshpk", + "version": "1.8.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sshpk/-/sshpk-1.8.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "sshpk", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/sshpk", + "repository_download_url": "https://registry.npmjs.org/sshpk/-/sshpk-1.8.3.tgz", + "api_data_url": "https://registry.npmjs.org/sshpk/1.8.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/sshpk@1.8.3" + } }, { "purl": "pkg:npm/stack-trace@0.0.9", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "stack-trace", + "version": "0.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "stack-trace", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/stack-trace", + "repository_download_url": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/stack-trace/0.0.9", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/stack-trace@0.0.9" + } }, { "purl": "pkg:npm/statuses@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "statuses", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "statuses", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/statuses", + "repository_download_url": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/statuses/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/statuses@1.3.0" + } }, { "purl": "pkg:npm/stream-buffers@2.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "stream-buffers", + "version": "2.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "stream-buffers", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/stream-buffers", + "repository_download_url": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/stream-buffers/2.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/stream-buffers@2.2.0" + } }, { "purl": "pkg:npm/string_decoder@0.10.31", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.10.31", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "string_decoder", + "version": "0.10.31", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "string_decoder", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/string_decoder", + "repository_download_url": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "api_data_url": "https://registry.npmjs.org/string_decoder/0.10.31", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/string_decoder@0.10.31" + } }, { "purl": "pkg:npm/stringstream@0.0.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "stringstream", + "version": "0.0.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "stringstream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/stringstream", + "repository_download_url": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "api_data_url": "https://registry.npmjs.org/stringstream/0.0.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/stringstream@0.0.5" + } }, { "purl": "pkg:npm/strip-ansi@3.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "strip-ansi", + "version": "3.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "strip-ansi", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/strip-ansi", + "repository_download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/strip-ansi/3.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/strip-ansi@3.0.1" + } }, { "purl": "pkg:npm/strip-bom@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "strip-bom", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "strip-bom", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/strip-bom", + "repository_download_url": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/strip-bom/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/strip-bom@2.0.0" + } }, { "purl": "pkg:npm/strip-indent@1.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "strip-indent", + "version": "1.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "strip-indent", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/strip-indent", + "repository_download_url": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/strip-indent/1.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/strip-indent@1.0.1" + } }, { "purl": "pkg:npm/strip-json-comments@1.0.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "strip-json-comments", + "version": "1.0.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "strip-json-comments", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/strip-json-comments", + "repository_download_url": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "api_data_url": "https://registry.npmjs.org/strip-json-comments/1.0.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/strip-json-comments@1.0.4" + } }, { "purl": "pkg:npm/supports-color@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "supports-color", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "supports-color", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/supports-color", + "repository_download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/supports-color/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/supports-color@2.0.0" + } }, { "purl": "pkg:npm/swap-case@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "swap-case", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "swap-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/swap-case", + "repository_download_url": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/swap-case/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/swap-case@1.1.2" + } }, { "purl": "pkg:npm/tar-stream@1.5.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.5.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tar-stream", + "version": "1.5.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tar-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tar-stream", + "repository_download_url": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", + "api_data_url": "https://registry.npmjs.org/tar-stream/1.5.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tar-stream@1.5.2" + } }, { "purl": "pkg:npm/temporary@0.0.8", - "extracted_requirement": null, + "extracted_requirement": "0.0.8", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "temporary", + "version": "0.0.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "temporary", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/temporary", + "repository_download_url": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "api_data_url": "https://registry.npmjs.org/temporary/0.0.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/temporary@0.0.8" + } }, { "purl": "pkg:npm/text-table@0.2.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "text-table", + "version": "0.2.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "text-table", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/text-table", + "repository_download_url": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "api_data_url": "https://registry.npmjs.org/text-table/0.2.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/text-table@0.2.0" + } }, { "purl": "pkg:npm/throttleit@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "throttleit", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "throttleit", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/throttleit", + "repository_download_url": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/throttleit/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/throttleit@1.0.0" + } }, { "purl": "pkg:npm/through@2.3.8", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.3.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "through", + "version": "2.3.8", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "through", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/through", + "repository_download_url": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "api_data_url": "https://registry.npmjs.org/through/2.3.8", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/through@2.3.8" + } }, { "purl": "pkg:npm/time-grunt@1.3.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "time-grunt", + "version": "1.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "time-grunt", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/time-grunt", + "repository_download_url": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/time-grunt/1.3.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/time-grunt@1.3.0" + } }, { "purl": "pkg:npm/tiny-lr@0.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tiny-lr", + "version": "0.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tiny-lr", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tiny-lr", + "repository_download_url": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/tiny-lr/0.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tiny-lr@0.2.1" + } }, { "purl": "pkg:npm/title-case@2.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "title-case", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/title-case/-/title-case-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "title-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/title-case", + "repository_download_url": "https://registry.npmjs.org/title-case/-/title-case-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/title-case/2.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/title-case@2.1.0" + } }, { "purl": "pkg:npm/tmp@0.0.28", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.28", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tmp", + "version": "0.0.28", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tmp", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tmp", + "repository_download_url": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "api_data_url": "https://registry.npmjs.org/tmp/0.0.28", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tmp@0.0.28" + } }, { "purl": "pkg:npm/to-double-quotes@2.0.0", - "extracted_requirement": null, + "extracted_requirement": "2.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-double-quotes", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-double-quotes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-double-quotes", + "repository_download_url": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/to-double-quotes/2.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/to-double-quotes@2.0.0" + } }, { "purl": "pkg:npm/to-single-quotes@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-single-quotes", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-single-quotes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-single-quotes", + "repository_download_url": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/to-single-quotes/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/to-single-quotes@2.0.1" + } }, { "purl": "pkg:npm/token-stream@0.0.1", - "extracted_requirement": null, + "extracted_requirement": "0.0.1", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": true, - "resolved_package": {} + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "token-stream", + "version": "0.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "token-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/token-stream", + "repository_download_url": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/token-stream/0.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/token-stream@0.0.1" + } }, { "purl": "pkg:npm/tough-cookie@2.2.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tough-cookie", + "version": "2.2.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tough-cookie", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tough-cookie", + "repository_download_url": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "api_data_url": "https://registry.npmjs.org/tough-cookie/2.2.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tough-cookie@2.2.2" + } }, { "purl": "pkg:npm/trim-newlines@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "trim-newlines", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "trim-newlines", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/trim-newlines", + "repository_download_url": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/trim-newlines/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/trim-newlines@1.0.0" + } }, { "purl": "pkg:npm/tunnel-agent@0.4.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tunnel-agent", + "version": "0.4.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tunnel-agent", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tunnel-agent", + "repository_download_url": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "api_data_url": "https://registry.npmjs.org/tunnel-agent/0.4.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tunnel-agent@0.4.3" + } }, { "purl": "pkg:npm/tweetnacl@0.13.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.13.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "tweetnacl", + "version": "0.13.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "tweetnacl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/tweetnacl", + "repository_download_url": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz", + "api_data_url": "https://registry.npmjs.org/tweetnacl/0.13.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/tweetnacl@0.13.3" + } }, { "purl": "pkg:npm/type-is@1.6.13", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.6.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "type-is", + "version": "1.6.13", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "type-is", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/type-is", + "repository_download_url": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", + "api_data_url": "https://registry.npmjs.org/type-is/1.6.13", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/type-is@1.6.13" + } }, { "purl": "pkg:npm/typedarray@0.0.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "typedarray", + "version": "0.0.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "typedarray", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/typedarray", + "repository_download_url": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "api_data_url": "https://registry.npmjs.org/typedarray/0.0.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/typedarray@0.0.6" + } }, { "purl": "pkg:npm/uc.micro@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "uc.micro", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "uc.micro", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/uc.micro", + "repository_download_url": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/uc.micro/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/uc.micro@1.0.2" + } }, { "purl": "pkg:npm/uglify-js@2.6.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.6.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "uglify-js", + "version": "2.6.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "uglify-js", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/uglify-js", + "repository_download_url": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "api_data_url": "https://registry.npmjs.org/uglify-js/2.6.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/uglify-js@2.6.4" + } }, { "purl": "pkg:npm/uglify-to-browserify@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "uglify-to-browserify", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "uglify-to-browserify", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/uglify-to-browserify", + "repository_download_url": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/uglify-to-browserify/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/uglify-to-browserify@1.0.2" + } }, { "purl": "pkg:npm/underscore@1.6.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.6.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "underscore", + "version": "1.6.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "underscore", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/underscore", + "repository_download_url": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "api_data_url": "https://registry.npmjs.org/underscore/1.6.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/underscore@1.6.0" + } }, { "purl": "pkg:npm/underscore.string@3.2.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.2.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "underscore.string", + "version": "3.2.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "underscore.string", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/underscore.string", + "repository_download_url": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", + "api_data_url": "https://registry.npmjs.org/underscore.string/3.2.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/underscore.string@3.2.3" + } }, { "purl": "pkg:npm/unpipe@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "unpipe", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "unpipe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/unpipe", + "repository_download_url": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/unpipe/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/unpipe@1.0.0" + } }, { "purl": "pkg:npm/upper-case@1.1.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "upper-case", + "version": "1.1.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "upper-case", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/upper-case", + "repository_download_url": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "api_data_url": "https://registry.npmjs.org/upper-case/1.1.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/upper-case@1.1.3" + } }, { "purl": "pkg:npm/upper-case-first@1.1.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "upper-case-first", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "upper-case-first", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/upper-case-first", + "repository_download_url": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/upper-case-first/1.1.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/upper-case-first@1.1.2" + } }, { "purl": "pkg:npm/uri-path@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "uri-path", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "uri-path", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/uri-path", + "repository_download_url": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/uri-path/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/uri-path@1.0.0" + } }, { "purl": "pkg:npm/util-deprecate@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "util-deprecate", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "util-deprecate", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/util-deprecate", + "repository_download_url": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/util-deprecate/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/util-deprecate@1.0.2" + } }, { "purl": "pkg:npm/utile@0.2.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "utile", + "version": "0.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "utile", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/utile", + "repository_download_url": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "api_data_url": "https://registry.npmjs.org/utile/0.2.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/utile@0.2.1" + } }, { "purl": "pkg:npm/utils-merge@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "utils-merge", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "utils-merge", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/utils-merge", + "repository_download_url": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/utils-merge/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/utils-merge@1.0.0" + } }, { "purl": "pkg:npm/uuid@2.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "uuid", + "version": "2.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "uuid", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/uuid", + "repository_download_url": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/uuid/2.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/uuid@2.0.2" + } }, { "purl": "pkg:npm/validate-npm-package-license@3.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "validate-npm-package-license", + "version": "3.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "validate-npm-package-license", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/validate-npm-package-license", + "repository_download_url": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/validate-npm-package-license/3.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/validate-npm-package-license@3.0.1" + } }, { "purl": "pkg:npm/verror@1.3.6", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.3.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "verror", + "version": "1.3.6", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "verror", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/verror", + "repository_download_url": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "api_data_url": "https://registry.npmjs.org/verror/1.3.6", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/verror@1.3.6" + } }, { "purl": "pkg:npm/void-elements@2.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "void-elements", + "version": "2.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "void-elements", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/void-elements", + "repository_download_url": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/void-elements/2.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/void-elements@2.0.1" + } }, { "purl": "pkg:npm/vow@0.4.4", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.4.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "vow", + "version": "0.4.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "vow", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/vow", + "repository_download_url": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz", + "api_data_url": "https://registry.npmjs.org/vow/0.4.4", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/vow@0.4.4" + } }, { "purl": "pkg:npm/vow-fs@0.3.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "vow-fs", + "version": "0.3.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "vow-fs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/vow-fs", + "repository_download_url": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz", + "api_data_url": "https://registry.npmjs.org/vow-fs/0.3.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/vow-fs@0.3.2" + } }, { "purl": "pkg:npm/vow-queue@0.3.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "vow-queue", + "version": "0.3.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "vow-queue", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/vow-queue", + "repository_download_url": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz", + "api_data_url": "https://registry.npmjs.org/vow-queue/0.3.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/vow-queue@0.3.1" + } }, { "purl": "pkg:npm/websocket-driver@0.6.5", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "websocket-driver", + "version": "0.6.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "websocket-driver", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/websocket-driver", + "repository_download_url": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "api_data_url": "https://registry.npmjs.org/websocket-driver/0.6.5", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/websocket-driver@0.6.5" + } }, { "purl": "pkg:npm/websocket-extensions@0.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "websocket-extensions", + "version": "0.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "websocket-extensions", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/websocket-extensions", + "repository_download_url": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/websocket-extensions/0.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/websocket-extensions@0.1.1" + } }, { "purl": "pkg:npm/when@3.7.7", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.7.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "when", + "version": "3.7.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "when", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/when", + "repository_download_url": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "api_data_url": "https://registry.npmjs.org/when/3.7.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/when@3.7.7" + } }, { "purl": "pkg:npm/which@1.2.10", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.2.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "which", + "version": "1.2.10", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/which/-/which-1.2.10.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "which", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/which", + "repository_download_url": "https://registry.npmjs.org/which/-/which-1.2.10.tgz", + "api_data_url": "https://registry.npmjs.org/which/1.2.10", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/which@1.2.10" + } }, { "purl": "pkg:npm/window-size@0.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "window-size", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "window-size", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/window-size", + "repository_download_url": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/window-size/0.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/window-size@0.1.0" + } }, { "purl": "pkg:npm/winston@0.8.3", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.8.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "winston", + "version": "0.8.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "winston", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/winston", + "repository_download_url": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "api_data_url": "https://registry.npmjs.org/winston/0.8.3", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/winston@0.8.3" + } }, { "purl": "pkg:npm/with@5.1.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "5.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "with", + "version": "5.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "with", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/with", + "repository_download_url": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/with/5.1.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/with@5.1.1" + } }, { "purl": "pkg:npm/wordwrap@0.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "wordwrap", + "version": "0.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "wordwrap", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/wordwrap", + "repository_download_url": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/wordwrap/0.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/wordwrap@0.0.2" + } }, { "purl": "pkg:npm/wrappy@1.0.2", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "wrappy", + "version": "1.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "wrappy", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/wrappy", + "repository_download_url": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/wrappy/1.0.2", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/wrappy@1.0.2" + } }, { "purl": "pkg:npm/xml-char-classes@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xml-char-classes", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "xml-char-classes", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xml-char-classes", + "repository_download_url": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/xml-char-classes/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/xml-char-classes@1.0.0" + } }, { "purl": "pkg:npm/xmlbuilder@3.1.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xmlbuilder", + "version": "3.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "xmlbuilder", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xmlbuilder", + "repository_download_url": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/xmlbuilder/3.1.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/xmlbuilder@3.1.0" + } }, { "purl": "pkg:npm/xtend@4.0.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "4.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xtend", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "xtend", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xtend", + "repository_download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/xtend/4.0.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/xtend@4.0.1" + } }, { "purl": "pkg:npm/yargs@3.10.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "3.10.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yargs", + "version": "3.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "yargs", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yargs", + "repository_download_url": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "api_data_url": "https://registry.npmjs.org/yargs/3.10.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/yargs@3.10.0" + } }, { "purl": "pkg:npm/yauzl@2.4.1", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "2.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yauzl", + "version": "2.4.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "yauzl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yauzl", + "repository_download_url": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "api_data_url": "https://registry.npmjs.org/yauzl/2.4.1", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/yauzl@2.4.1" + } }, { "purl": "pkg:npm/zip-stream@1.0.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "zip-stream", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "zip-stream", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/zip-stream", + "repository_download_url": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/zip-stream/1.0.0", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/zip-stream@1.0.0" + } } ], - "purl": "pkg:npm/bootstrap@3.3.7", "repository_homepage_url": "https://www.npmjs.com/package/bootstrap", "repository_download_url": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", - "api_data_url": "https://registry.npmjs.org/bootstrap/3.3.7" - }, - { - "type": "npm", - "namespace": null, - "name": "abbrev", - "version": "1.0.9", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/abbrev@1.0.9", - "repository_homepage_url": "https://www.npmjs.com/package/abbrev", - "repository_download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "api_data_url": "https://registry.npmjs.org/abbrev/1.0.9" - }, - { - "type": "npm", - "namespace": null, - "name": "accepts", - "version": "1.3.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/accepts@1.3.3", - "repository_homepage_url": "https://www.npmjs.com/package/accepts", - "repository_download_url": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "api_data_url": "https://registry.npmjs.org/accepts/1.3.3" - }, - { - "type": "npm", - "namespace": null, - "name": "acorn", - "version": "3.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/acorn/-/acorn-3.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/acorn@3.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/acorn", - "repository_download_url": "https://registry.npmjs.org/acorn/-/acorn-3.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/acorn/3.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "acorn-globals", - "version": "3.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/acorn-globals@3.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/acorn-globals", - "repository_download_url": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/acorn-globals/3.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "agent-base", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/agent-base/-/agent-base-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/semver@5.0.3", - "extracted_requirement": ">=5.0.1 <5.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/agent-base@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/agent-base", - "repository_download_url": "https://registry.npmjs.org/agent-base/-/agent-base-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/agent-base/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "align-text", - "version": "0.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/align-text@0.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/align-text", - "repository_download_url": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/align-text/0.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "amdefine", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/amdefine@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/amdefine", - "repository_download_url": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/amdefine/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ansi-regex", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ansi-regex@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", - "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/ansi-regex/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ansi-styles", - "version": "2.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ansi-styles@2.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/ansi-styles", - "repository_download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/ansi-styles/2.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "archiver", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/archiver/-/archiver-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.8.0 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/archiver@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/archiver", - "repository_download_url": "https://registry.npmjs.org/archiver/-/archiver-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/archiver/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "archiver-utils", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.8.0 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/archiver-utils@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/archiver-utils", - "repository_download_url": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/archiver-utils/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "argparse", - "version": "1.0.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/argparse/-/argparse-1.0.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/argparse@1.0.7", - "repository_homepage_url": "https://www.npmjs.com/package/argparse", - "repository_download_url": "https://registry.npmjs.org/argparse/-/argparse-1.0.7.tgz", - "api_data_url": "https://registry.npmjs.org/argparse/1.0.7" - }, - { - "type": "npm", - "namespace": null, - "name": "array-differ", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/array-differ@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/array-differ", - "repository_download_url": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/array-differ/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "array-find-index", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/array-find-index@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/array-find-index", - "repository_download_url": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/array-find-index/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "array-union", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/array-union@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/array-union", - "repository_download_url": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/array-union/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "array-uniq", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/array-uniq@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/array-uniq", - "repository_download_url": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/array-uniq/1.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "arrify", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/arrify@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/arrify", - "repository_download_url": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/arrify/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "asap", - "version": "2.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/asap@2.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/asap", - "repository_download_url": "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/asap/2.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "asn1", - "version": "0.2.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/asn1@0.2.3", - "repository_homepage_url": "https://www.npmjs.com/package/asn1", - "repository_download_url": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "api_data_url": "https://registry.npmjs.org/asn1/0.2.3" - }, - { - "type": "npm", - "namespace": null, - "name": "assert-plus", - "version": "0.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/assert-plus@0.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/assert-plus", - "repository_download_url": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/assert-plus/0.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "async", - "version": "1.5.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/async@1.5.2", - "repository_homepage_url": "https://www.npmjs.com/package/async", - "repository_download_url": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "api_data_url": "https://registry.npmjs.org/async/1.5.2" - }, - { - "type": "npm", - "namespace": null, - "name": "autoprefixer-core", - "version": "5.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/autoprefixer-core@5.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/autoprefixer-core", - "repository_download_url": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/autoprefixer-core/5.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "aws-sign2", - "version": "0.6.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/aws-sign2@0.6.0", - "repository_homepage_url": "https://www.npmjs.com/package/aws-sign2", - "repository_download_url": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "api_data_url": "https://registry.npmjs.org/aws-sign2/0.6.0" - }, - { - "type": "npm", - "namespace": null, - "name": "aws4", - "version": "1.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/aws4/-/aws4-1.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/aws4@1.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/aws4", - "repository_download_url": "https://registry.npmjs.org/aws4/-/aws4-1.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/aws4/1.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-runtime", - "version": "6.9.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.9.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/babel-runtime@6.9.2", - "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", - "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.9.2.tgz", - "api_data_url": "https://registry.npmjs.org/babel-runtime/6.9.2" - }, - { - "type": "npm", - "namespace": null, - "name": "babylon", - "version": "6.8.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babylon/-/babylon-6.8.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/babylon@6.8.4", - "repository_homepage_url": "https://www.npmjs.com/package/babylon", - "repository_download_url": "https://registry.npmjs.org/babylon/-/babylon-6.8.4.tgz", - "api_data_url": "https://registry.npmjs.org/babylon/6.8.4" - }, - { - "type": "npm", - "namespace": null, - "name": "balanced-match", - "version": "0.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/balanced-match@0.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/balanced-match", - "repository_download_url": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/balanced-match/0.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "basic-auth", - "version": "1.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/basic-auth@1.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/basic-auth", - "repository_download_url": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/basic-auth/1.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "batch", - "version": "0.5.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/batch@0.5.3", - "repository_homepage_url": "https://www.npmjs.com/package/batch", - "repository_download_url": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "api_data_url": "https://registry.npmjs.org/batch/0.5.3" - }, - { - "type": "npm", - "namespace": null, - "name": "bl", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/readable-stream@2.0.6", - "extracted_requirement": ">=2.0.5 <2.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/bl@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/bl", - "repository_download_url": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/bl/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "body-parser", - "version": "1.14.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/http-errors@1.3.1", - "extracted_requirement": ">=1.3.1 <1.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/qs@5.2.0", - "extracted_requirement": "5.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/body-parser@1.14.2", - "repository_homepage_url": "https://www.npmjs.com/package/body-parser", - "repository_download_url": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "api_data_url": "https://registry.npmjs.org/body-parser/1.14.2" - }, - { - "type": "npm", - "namespace": null, - "name": "boom", - "version": "2.10.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/boom@2.10.1", - "repository_homepage_url": "https://www.npmjs.com/package/boom", - "repository_download_url": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "api_data_url": "https://registry.npmjs.org/boom/2.10.1" - }, - { - "type": "npm", - "namespace": null, - "name": "brace-expansion", - "version": "1.1.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/brace-expansion@1.1.5", - "repository_homepage_url": "https://www.npmjs.com/package/brace-expansion", - "repository_download_url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz", - "api_data_url": "https://registry.npmjs.org/brace-expansion/1.1.5" - }, - { - "type": "npm", - "namespace": null, - "name": "browserify-zlib", - "version": "0.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/browserify-zlib@0.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/browserify-zlib", - "repository_download_url": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/browserify-zlib/0.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "browserslist", - "version": "0.4.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/browserslist@0.4.0", - "repository_homepage_url": "https://www.npmjs.com/package/browserslist", - "repository_download_url": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/browserslist/0.4.0" - }, - { - "type": "npm", - "namespace": null, - "name": "btoa", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/btoa@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/btoa", - "repository_download_url": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/btoa/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "buffer-crc32", - "version": "0.2.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/buffer-crc32@0.2.5", - "repository_homepage_url": "https://www.npmjs.com/package/buffer-crc32", - "repository_download_url": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz", - "api_data_url": "https://registry.npmjs.org/buffer-crc32/0.2.5" - }, - { - "type": "npm", - "namespace": null, - "name": "buffer-shims", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/buffer-shims@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/buffer-shims", - "repository_download_url": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/buffer-shims/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "builtin-modules", - "version": "1.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/builtin-modules@1.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/builtin-modules", - "repository_download_url": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/builtin-modules/1.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "bytes", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/bytes@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/bytes", - "repository_download_url": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/bytes/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "camel-case", - "version": "3.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/camel-case@3.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/camel-case", - "repository_download_url": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/camel-case/3.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "camelcase", - "version": "2.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/camelcase@2.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/camelcase", - "repository_download_url": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/camelcase/2.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "camelcase-keys", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/camelcase-keys@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/camelcase-keys", - "repository_download_url": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/camelcase-keys/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "caniuse-db", - "version": "1.0.30000506", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000506.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/caniuse-db@1.0.30000506", - "repository_homepage_url": "https://www.npmjs.com/package/caniuse-db", - "repository_download_url": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000506.tgz", - "api_data_url": "https://registry.npmjs.org/caniuse-db/1.0.30000506" - }, - { - "type": "npm", - "namespace": null, - "name": "caseless", - "version": "0.11.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/caseless@0.11.0", - "repository_homepage_url": "https://www.npmjs.com/package/caseless", - "repository_download_url": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "api_data_url": "https://registry.npmjs.org/caseless/0.11.0" - }, - { - "type": "npm", - "namespace": null, - "name": "center-align", - "version": "0.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/center-align@0.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/center-align", - "repository_download_url": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/center-align/0.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "chalk", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/chalk@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/chalk", - "repository_download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/chalk/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "change-case", - "version": "3.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/change-case/-/change-case-3.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/change-case@3.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/change-case", - "repository_download_url": "https://registry.npmjs.org/change-case/-/change-case-3.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/change-case/3.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "character-parser", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/character-parser@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/character-parser", - "repository_download_url": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/character-parser/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "clean-css", - "version": "3.4.18", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.18.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/clean-css@3.4.18", - "repository_homepage_url": "https://www.npmjs.com/package/clean-css", - "repository_download_url": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.18.tgz", - "api_data_url": "https://registry.npmjs.org/clean-css/3.4.18" - }, - { - "type": "npm", - "namespace": null, - "name": "cli", - "version": "0.6.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/glob@3.2.11", - "extracted_requirement": ">=3.2.1 <3.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/minimatch@0.3.0", - "extracted_requirement": ">=0.3.0 <0.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/cli@0.6.6", - "repository_homepage_url": "https://www.npmjs.com/package/cli", - "repository_download_url": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "api_data_url": "https://registry.npmjs.org/cli/0.6.6" - }, - { - "type": "npm", - "namespace": null, - "name": "cli-table", - "version": "0.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/colors@1.0.3", - "extracted_requirement": "1.0.3", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/cli-table@0.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/cli-table", - "repository_download_url": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/cli-table/0.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "cliui", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/cliui@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/cliui", - "repository_download_url": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/cliui/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "coffee-script", - "version": "1.10.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/coffee-script@1.10.0", - "repository_homepage_url": "https://www.npmjs.com/package/coffee-script", - "repository_download_url": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "api_data_url": "https://registry.npmjs.org/coffee-script/1.10.0" - }, - { - "type": "npm", - "namespace": null, - "name": "colors", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/colors@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/colors", - "repository_download_url": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/colors/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "combined-stream", - "version": "1.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/combined-stream@1.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/combined-stream", - "repository_download_url": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/combined-stream/1.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "commander", - "version": "2.8.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/commander@2.8.1", - "repository_homepage_url": "https://www.npmjs.com/package/commander", - "repository_download_url": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "api_data_url": "https://registry.npmjs.org/commander/2.8.1" - }, - { - "type": "npm", - "namespace": null, - "name": "comment-parser", - "version": "0.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/comment-parser@0.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/comment-parser", - "repository_download_url": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/comment-parser/0.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "compress-commons", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/compress-commons@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/compress-commons", - "repository_download_url": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/compress-commons/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "concat-map", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/concat-map@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/concat-map", - "repository_download_url": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/concat-map/0.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "concat-stream", - "version": "1.5.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/readable-stream@2.0.6", - "extracted_requirement": ">=2.0.0 <2.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/concat-stream@1.5.1", - "repository_homepage_url": "https://www.npmjs.com/package/concat-stream", - "repository_download_url": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz", - "api_data_url": "https://registry.npmjs.org/concat-stream/1.5.1" - }, - { - "type": "npm", - "namespace": null, - "name": "connect", - "version": "3.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/connect@3.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/connect", - "repository_download_url": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/connect/3.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "connect-livereload", - "version": "0.5.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/connect-livereload@0.5.4", - "repository_homepage_url": "https://www.npmjs.com/package/connect-livereload", - "repository_download_url": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "api_data_url": "https://registry.npmjs.org/connect-livereload/0.5.4" - }, - { - "type": "npm", - "namespace": null, - "name": "console-browserify", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/console-browserify@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/console-browserify", - "repository_download_url": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/console-browserify/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "constant-case", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/constant-case@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/constant-case", - "repository_download_url": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/constant-case/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "constantinople", - "version": "3.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/constantinople@3.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/constantinople", - "repository_download_url": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/constantinople/3.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "content-type", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/content-type@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/content-type", - "repository_download_url": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/content-type/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "core-js", - "version": "2.4.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/core-js/-/core-js-2.4.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/core-js@2.4.0", - "repository_homepage_url": "https://www.npmjs.com/package/core-js", - "repository_download_url": "https://registry.npmjs.org/core-js/-/core-js-2.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/core-js/2.4.0" - }, - { - "type": "npm", - "namespace": null, - "name": "core-util-is", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/core-util-is@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/core-util-is", - "repository_download_url": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/core-util-is/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "crc32-stream", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/crc32-stream@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/crc32-stream", - "repository_download_url": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/crc32-stream/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "cryptiles", - "version": "2.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/cryptiles@2.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/cryptiles", - "repository_download_url": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/cryptiles/2.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "csscomb", - "version": "3.1.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/csscomb/-/csscomb-3.1.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/commander@2.0.0", - "extracted_requirement": "2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/csscomb@3.1.8", - "repository_homepage_url": "https://www.npmjs.com/package/csscomb", - "repository_download_url": "https://registry.npmjs.org/csscomb/-/csscomb-3.1.8.tgz", - "api_data_url": "https://registry.npmjs.org/csscomb/3.1.8" - }, - { - "type": "npm", - "namespace": null, - "name": "csscomb-core", - "version": "3.0.0-3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/minimatch@0.2.12", - "extracted_requirement": "0.2.12", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/csscomb-core@3.0.0-3.1", - "repository_homepage_url": "https://www.npmjs.com/package/csscomb-core", - "repository_download_url": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-3.0.0-3.1.tgz", - "api_data_url": "https://registry.npmjs.org/csscomb-core/3.0.0-3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "csslint", - "version": "0.10.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/csslint@0.10.0", - "repository_homepage_url": "https://www.npmjs.com/package/csslint", - "repository_download_url": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", - "api_data_url": "https://registry.npmjs.org/csslint/0.10.0" - }, - { - "type": "npm", - "namespace": null, - "name": "cst", - "version": "0.4.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cst/-/cst-0.4.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/cst@0.4.4", - "repository_homepage_url": "https://www.npmjs.com/package/cst", - "repository_download_url": "https://registry.npmjs.org/cst/-/cst-0.4.4.tgz", - "api_data_url": "https://registry.npmjs.org/cst/0.4.4" - }, - { - "type": "npm", - "namespace": null, - "name": "currently-unhandled", - "version": "0.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/currently-unhandled@0.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/currently-unhandled", - "repository_download_url": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/currently-unhandled/0.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "cycle", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/cycle@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/cycle", - "repository_download_url": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/cycle/1.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "dashdash", - "version": "1.14.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/assert-plus@1.0.0", - "extracted_requirement": ">=1.0.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/dashdash@1.14.0", - "repository_homepage_url": "https://www.npmjs.com/package/dashdash", - "repository_download_url": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", - "api_data_url": "https://registry.npmjs.org/dashdash/1.14.0" - }, - { - "type": "npm", - "namespace": null, - "name": "date-now", - "version": "0.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/date-now@0.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/date-now", - "repository_download_url": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/date-now/0.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "date-time", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/date-time/-/date-time-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/date-time@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/date-time", - "repository_download_url": "https://registry.npmjs.org/date-time/-/date-time-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/date-time/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "dateformat", - "version": "1.0.12", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/dateformat@1.0.12", - "repository_homepage_url": "https://www.npmjs.com/package/dateformat", - "repository_download_url": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "api_data_url": "https://registry.npmjs.org/dateformat/1.0.12" - }, - { - "type": "npm", - "namespace": null, - "name": "debug", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/debug@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/debug", - "repository_download_url": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/debug/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "decamelize", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/decamelize@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/decamelize", - "repository_download_url": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/decamelize/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "deep-equal", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/deep-equal@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/deep-equal", - "repository_download_url": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/deep-equal/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "delayed-stream", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/delayed-stream@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/delayed-stream", - "repository_download_url": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/delayed-stream/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "depd", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/depd@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/depd", - "repository_download_url": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/depd/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "destroy", - "version": "1.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/destroy@1.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/destroy", - "repository_download_url": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/destroy/1.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "diff", - "version": "1.3.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/diff/-/diff-1.3.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/diff@1.3.2", - "repository_homepage_url": "https://www.npmjs.com/package/diff", - "repository_download_url": "https://registry.npmjs.org/diff/-/diff-1.3.2.tgz", - "api_data_url": "https://registry.npmjs.org/diff/1.3.2" - }, - { - "type": "npm", - "namespace": null, - "name": "doctypes", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/doctypes/-/doctypes-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/doctypes@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/doctypes", - "repository_download_url": "https://registry.npmjs.org/doctypes/-/doctypes-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/doctypes/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "dom-serializer", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/domelementtype@1.1.3", - "extracted_requirement": ">=1.1.1 <1.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/entities@1.1.1", - "extracted_requirement": ">=1.1.1 <1.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/dom-serializer@0.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/dom-serializer", - "repository_download_url": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/dom-serializer/0.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "domelementtype", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/domelementtype@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/domelementtype", - "repository_download_url": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/domelementtype/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "domhandler", - "version": "2.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/domhandler@2.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/domhandler", - "repository_download_url": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/domhandler/2.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "domutils", - "version": "1.5.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/domutils@1.5.1", - "repository_homepage_url": "https://www.npmjs.com/package/domutils", - "repository_download_url": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "api_data_url": "https://registry.npmjs.org/domutils/1.5.1" - }, - { - "type": "npm", - "namespace": null, - "name": "dot-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/dot-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/dot-case", - "repository_download_url": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/dot-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ecc-jsbn", - "version": "0.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ecc-jsbn@0.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/ecc-jsbn", - "repository_download_url": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/ecc-jsbn/0.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "ee-first", - "version": "1.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ee-first@1.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/ee-first", - "repository_download_url": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/ee-first/1.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "encodeurl", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/encodeurl@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/encodeurl", - "repository_download_url": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/encodeurl/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "end-of-stream", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/end-of-stream@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/end-of-stream", - "repository_download_url": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/end-of-stream/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "entities", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/entities@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/entities", - "repository_download_url": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/entities/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "errno", - "version": "0.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/errno@0.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/errno", - "repository_download_url": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/errno/0.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "error-ex", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/error-ex@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/error-ex", - "repository_download_url": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/error-ex/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "es6-promise", - "version": "2.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/es6-promise@2.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/es6-promise", - "repository_download_url": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/es6-promise/2.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "escape-html", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/escape-html@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/escape-html", - "repository_download_url": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/escape-html/1.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "escape-string-regexp", - "version": "1.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/escape-string-regexp@1.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/escape-string-regexp", - "repository_download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/escape-string-regexp/1.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "esprima", - "version": "2.7.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/esprima/-/esprima-2.7.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/esprima@2.7.2", - "repository_homepage_url": "https://www.npmjs.com/package/esprima", - "repository_download_url": "https://registry.npmjs.org/esprima/-/esprima-2.7.2.tgz", - "api_data_url": "https://registry.npmjs.org/esprima/2.7.2" - }, - { - "type": "npm", - "namespace": null, - "name": "estraverse", - "version": "4.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/estraverse@4.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/estraverse", - "repository_download_url": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/estraverse/4.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "etag", - "version": "1.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/etag@1.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/etag", - "repository_download_url": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/etag/1.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "eventemitter2", - "version": "0.4.14", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/eventemitter2@0.4.14", - "repository_homepage_url": "https://www.npmjs.com/package/eventemitter2", - "repository_download_url": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "api_data_url": "https://registry.npmjs.org/eventemitter2/0.4.14" - }, - { - "type": "npm", - "namespace": null, - "name": "exit", - "version": "0.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/exit@0.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/exit", - "repository_download_url": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/exit/0.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "extend", - "version": "3.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/extend@3.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/extend", - "repository_download_url": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/extend/3.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "extract-zip", - "version": "1.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/concat-stream@1.5.0", - "extracted_requirement": "1.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/debug@0.7.4", - "extracted_requirement": "0.7.4", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/minimist@0.0.8", - "extracted_requirement": "0.0.8", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/mkdirp@0.5.0", - "extracted_requirement": "0.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/readable-stream@2.0.6", - "extracted_requirement": ">=2.0.0 <2.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/extract-zip@1.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/extract-zip", - "repository_download_url": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/extract-zip/1.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "extsprintf", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/extsprintf@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/extsprintf", - "repository_download_url": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/extsprintf/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "eyes", - "version": "0.1.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/eyes@0.1.8", - "repository_homepage_url": "https://www.npmjs.com/package/eyes", - "repository_download_url": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "api_data_url": "https://registry.npmjs.org/eyes/0.1.8" - }, - { - "type": "npm", - "namespace": null, - "name": "faye-websocket", - "version": "0.10.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/faye-websocket@0.10.0", - "repository_homepage_url": "https://www.npmjs.com/package/faye-websocket", - "repository_download_url": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "api_data_url": "https://registry.npmjs.org/faye-websocket/0.10.0" - }, - { - "type": "npm", - "namespace": null, - "name": "fd-slicer", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/fd-slicer@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/fd-slicer", - "repository_download_url": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/fd-slicer/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "fg-lodash", - "version": "0.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@2.4.2", - "extracted_requirement": ">=2.4.1 <3.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/underscore.string@2.3.3", - "extracted_requirement": ">=2.3.3 <2.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/fg-lodash@0.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/fg-lodash", - "repository_download_url": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/fg-lodash/0.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "figures", - "version": "1.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/figures@1.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/figures", - "repository_download_url": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/figures/1.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "file-sync-cmp", - "version": "0.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/file-sync-cmp@0.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/file-sync-cmp", - "repository_download_url": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/file-sync-cmp/0.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "finalhandler", - "version": "0.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/finalhandler@0.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/finalhandler", - "repository_download_url": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/finalhandler/0.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "find-up", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/find-up@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/find-up", - "repository_download_url": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/find-up/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "findup-sync", - "version": "0.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/glob@5.0.15", - "extracted_requirement": ">=5.0.0 <5.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/findup-sync@0.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/findup-sync", - "repository_download_url": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/findup-sync/0.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "forever-agent", - "version": "0.6.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/forever-agent@0.6.1", - "repository_homepage_url": "https://www.npmjs.com/package/forever-agent", - "repository_download_url": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "api_data_url": "https://registry.npmjs.org/forever-agent/0.6.1" - }, - { - "type": "npm", - "namespace": null, - "name": "form-data", - "version": "1.0.0-rc4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/form-data@1.0.0-rc4", - "repository_homepage_url": "https://www.npmjs.com/package/form-data", - "repository_download_url": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", - "api_data_url": "https://registry.npmjs.org/form-data/1.0.0-rc4" - }, - { - "type": "npm", - "namespace": null, - "name": "fresh", - "version": "0.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/fresh@0.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/fresh", - "repository_download_url": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/fresh/0.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "fs-extra", - "version": "0.26.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/fs-extra@0.26.7", - "repository_homepage_url": "https://www.npmjs.com/package/fs-extra", - "repository_download_url": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "api_data_url": "https://registry.npmjs.org/fs-extra/0.26.7" - }, - { - "type": "npm", - "namespace": null, - "name": "fs.realpath", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/fs.realpath@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/fs.realpath", - "repository_download_url": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/fs.realpath/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "gaze", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/gaze/-/gaze-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/gaze@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/gaze", - "repository_download_url": "https://registry.npmjs.org/gaze/-/gaze-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/gaze/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "generate-function", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/generate-function@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/generate-function", - "repository_download_url": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/generate-function/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "generate-object-property", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/generate-object-property@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/generate-object-property", - "repository_download_url": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/generate-object-property/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "get-stdin", - "version": "4.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/get-stdin@4.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/get-stdin", - "repository_download_url": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/get-stdin/4.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "getobject", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/getobject@0.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/getobject", - "repository_download_url": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/getobject/0.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "getpass", - "version": "0.1.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/assert-plus@1.0.0", - "extracted_requirement": ">=1.0.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/getpass@0.1.6", - "repository_homepage_url": "https://www.npmjs.com/package/getpass", - "repository_download_url": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "api_data_url": "https://registry.npmjs.org/getpass/0.1.6" - }, - { - "type": "npm", - "namespace": null, - "name": "glob", - "version": "7.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/glob@7.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/glob", - "repository_download_url": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/glob/7.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "globule", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/globule/-/globule-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.9.0", - "extracted_requirement": ">=4.9.0 <4.10.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/globule@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/globule", - "repository_download_url": "https://registry.npmjs.org/globule/-/globule-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/globule/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "gonzales-pe", - "version": "3.0.0-28", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/gonzales-pe@3.0.0-28", - "repository_homepage_url": "https://www.npmjs.com/package/gonzales-pe", - "repository_download_url": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-28.tgz", - "api_data_url": "https://registry.npmjs.org/gonzales-pe/3.0.0-28" - }, - { - "type": "npm", - "namespace": null, - "name": "graceful-fs", - "version": "4.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/graceful-fs@4.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/graceful-fs", - "repository_download_url": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/graceful-fs/4.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "graceful-readlink", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/graceful-readlink@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/graceful-readlink", - "repository_download_url": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/graceful-readlink/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/grunt-cli@1.2.0", - "extracted_requirement": ">=1.2.0 <1.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt", - "repository_download_url": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-autoprefixer", - "version": "3.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-3.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ansi-regex@1.1.1", - "extracted_requirement": ">=1.1.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/chalk@1.0.0", - "extracted_requirement": ">=1.0.0 <1.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/has-ansi@1.0.3", - "extracted_requirement": ">=1.0.3 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/strip-ansi@2.0.1", - "extracted_requirement": ">=2.0.1 <3.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/supports-color@1.3.1", - "extracted_requirement": ">=1.3.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-autoprefixer@3.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-autoprefixer", - "repository_download_url": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-3.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-autoprefixer/3.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-clean", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/rimraf@2.5.3", - "extracted_requirement": ">=2.5.1 <3.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-contrib-clean@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-clean", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-clean/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-compress", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.7.0 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-contrib-compress@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-compress", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-compress/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-concat", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/source-map@0.5.6", - "extracted_requirement": ">=0.5.3 <0.6.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-contrib-concat@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-concat", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-concat/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-connect", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-connect@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-connect", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-connect/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-copy", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-copy@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-copy", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-copy/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-csslint", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-csslint@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-csslint", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-csslint/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-cssmin", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-cssmin@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-cssmin", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-cssmin/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-htmlmin", - "version": "1.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-1.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-htmlmin@1.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-htmlmin", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-1.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-htmlmin/1.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-jshint", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-jshint@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-jshint", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-jshint/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-less", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.8.2 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-contrib-less@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-less", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-less/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-pug", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-pug/-/grunt-contrib-pug-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-pug@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-pug", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-pug/-/grunt-contrib-pug-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-pug/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-qunit", - "version": "0.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-qunit@0.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-qunit", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-qunit/0.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-uglify", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.0.1 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-contrib-uglify@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-uglify", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-uglify/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-contrib-watch", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-contrib-watch@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-contrib-watch", - "repository_download_url": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-contrib-watch/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-csscomb", - "version": "3.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-csscomb@3.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-csscomb", - "repository_download_url": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-csscomb/3.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-exec", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-exec@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-exec", - "repository_download_url": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-exec/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-html", - "version": "8.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-html/-/grunt-html-8.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-html@8.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-html", - "repository_download_url": "https://registry.npmjs.org/grunt-html/-/grunt-html-8.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-html/8.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-jekyll", - "version": "0.4.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-jekyll@0.4.4", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-jekyll", - "repository_download_url": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.4.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-jekyll/0.4.4" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-jscs", - "version": "3.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-3.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.6.1", - "extracted_requirement": ">=4.6.1 <4.7.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-jscs@3.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-jscs", - "repository_download_url": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-3.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-jscs/3.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-known-options", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-known-options@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-known-options", - "repository_download_url": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-known-options/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-legacy-log", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/grunt-legacy-log@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-log", - "repository_download_url": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-legacy-log/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-legacy-log-utils", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.3.0", - "extracted_requirement": ">=4.3.0 <4.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-legacy-log-utils@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-log-utils", - "repository_download_url": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-legacy-log-utils/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-legacy-util", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.3.0", - "extracted_requirement": ">=4.3.0 <4.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-legacy-util@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-legacy-util", - "repository_download_url": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-legacy-util/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-lib-phantomjs", - "version": "0.6.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.6.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/semver@1.0.14", - "extracted_requirement": ">=1.0.14 <1.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-lib-phantomjs@0.6.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-lib-phantomjs", - "repository_download_url": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.6.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-lib-phantomjs/0.6.0" - }, - { - "type": "npm", - "namespace": null, - "name": "grunt-saucelabs", - "version": "9.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/grunt-saucelabs/-/grunt-saucelabs-9.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.13.1 <4.14.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/grunt-saucelabs@9.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/grunt-saucelabs", - "repository_download_url": "https://registry.npmjs.org/grunt-saucelabs/-/grunt-saucelabs-9.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/grunt-saucelabs/9.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "gzip-size", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/gzip-size@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/gzip-size", - "repository_download_url": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/gzip-size/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "har-validator", - "version": "2.0.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/commander@2.9.0", - "extracted_requirement": ">=2.9.0 <3.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/har-validator@2.0.6", - "repository_homepage_url": "https://www.npmjs.com/package/har-validator", - "repository_download_url": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "api_data_url": "https://registry.npmjs.org/har-validator/2.0.6" - }, - { - "type": "npm", - "namespace": null, - "name": "has-ansi", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/has-ansi@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/has-ansi", - "repository_download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/has-ansi/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "has-color", - "version": "0.1.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/has-color@0.1.7", - "repository_homepage_url": "https://www.npmjs.com/package/has-color", - "repository_download_url": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "api_data_url": "https://registry.npmjs.org/has-color/0.1.7" - }, - { - "type": "npm", - "namespace": null, - "name": "hasha", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/hasha@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/hasha", - "repository_download_url": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/hasha/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "hawk", - "version": "3.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/hawk@3.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/hawk", - "repository_download_url": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/hawk/3.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "he", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/he/-/he-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/he@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/he", - "repository_download_url": "https://registry.npmjs.org/he/-/he-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/he/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "header-case", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/header-case/-/header-case-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/header-case@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/header-case", - "repository_download_url": "https://registry.npmjs.org/header-case/-/header-case-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/header-case/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "hoek", - "version": "2.16.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/hoek@2.16.3", - "repository_homepage_url": "https://www.npmjs.com/package/hoek", - "repository_download_url": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "api_data_url": "https://registry.npmjs.org/hoek/2.16.3" - }, - { - "type": "npm", - "namespace": null, - "name": "hooker", - "version": "0.2.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/hooker@0.2.3", - "repository_homepage_url": "https://www.npmjs.com/package/hooker", - "repository_download_url": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "api_data_url": "https://registry.npmjs.org/hooker/0.2.3" - }, - { - "type": "npm", - "namespace": null, - "name": "hosted-git-info", - "version": "2.1.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/hosted-git-info@2.1.5", - "repository_homepage_url": "https://www.npmjs.com/package/hosted-git-info", - "repository_download_url": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "api_data_url": "https://registry.npmjs.org/hosted-git-info/2.1.5" - }, - { - "type": "npm", - "namespace": null, - "name": "html-minifier", - "version": "2.1.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/commander@2.9.0", - "extracted_requirement": ">=2.9.0 <2.10.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/html-minifier@2.1.7", - "repository_homepage_url": "https://www.npmjs.com/package/html-minifier", - "repository_download_url": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", - "api_data_url": "https://registry.npmjs.org/html-minifier/2.1.7" - }, - { - "type": "npm", - "namespace": null, - "name": "htmlparser2", - "version": "3.8.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/isarray@0.0.1", - "extracted_requirement": "0.0.1", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/readable-stream@1.1.14", - "extracted_requirement": ">=1.1.0 <1.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/htmlparser2@3.8.3", - "repository_homepage_url": "https://www.npmjs.com/package/htmlparser2", - "repository_download_url": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "api_data_url": "https://registry.npmjs.org/htmlparser2/3.8.3" - }, - { - "type": "npm", - "namespace": null, - "name": "http-errors", - "version": "1.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/http-errors@1.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/http-errors", - "repository_download_url": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/http-errors/1.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "http-signature", - "version": "1.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/http-signature@1.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/http-signature", - "repository_download_url": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/http-signature/1.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "http2", - "version": "3.3.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/http2/-/http2-3.3.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/http2@3.3.4", - "repository_homepage_url": "https://www.npmjs.com/package/http2", - "repository_download_url": "https://registry.npmjs.org/http2/-/http2-3.3.4.tgz", - "api_data_url": "https://registry.npmjs.org/http2/3.3.4" - }, - { - "type": "npm", - "namespace": null, - "name": "https-proxy-agent", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/https-proxy-agent@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/https-proxy-agent", - "repository_download_url": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/https-proxy-agent/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "i", - "version": "0.3.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/i@0.3.5", - "repository_homepage_url": "https://www.npmjs.com/package/i", - "repository_download_url": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "api_data_url": "https://registry.npmjs.org/i/0.3.5" - }, - { - "type": "npm", - "namespace": null, - "name": "iconv-lite", - "version": "0.4.13", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/iconv-lite@0.4.13", - "repository_homepage_url": "https://www.npmjs.com/package/iconv-lite", - "repository_download_url": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "api_data_url": "https://registry.npmjs.org/iconv-lite/0.4.13" - }, - { - "type": "npm", - "namespace": null, - "name": "image-size", - "version": "0.4.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/image-size@0.4.0", - "repository_homepage_url": "https://www.npmjs.com/package/image-size", - "repository_download_url": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/image-size/0.4.0" - }, - { - "type": "npm", - "namespace": null, - "name": "indent-string", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/indent-string@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/indent-string", - "repository_download_url": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/indent-string/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "inflight", - "version": "1.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/inflight@1.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/inflight", - "repository_download_url": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/inflight/1.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "inherit", - "version": "2.2.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/inherit/-/inherit-2.2.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/inherit@2.2.4", - "repository_homepage_url": "https://www.npmjs.com/package/inherit", - "repository_download_url": "https://registry.npmjs.org/inherit/-/inherit-2.2.4.tgz", - "api_data_url": "https://registry.npmjs.org/inherit/2.2.4" - }, - { - "type": "npm", - "namespace": null, - "name": "inherits", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/inherits@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/inherits", - "repository_download_url": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/inherits/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "interpret", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/interpret@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/interpret", - "repository_download_url": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/interpret/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "is-arrayish", - "version": "0.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-arrayish@0.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/is-arrayish", - "repository_download_url": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/is-arrayish/0.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "is-buffer", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-buffer@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/is-buffer", - "repository_download_url": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/is-buffer/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "is-builtin-module", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-builtin-module@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/is-builtin-module", - "repository_download_url": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/is-builtin-module/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "is-expression", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-expression/-/is-expression-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/acorn@3.1.0", - "extracted_requirement": ">=3.1.0 <3.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/is-expression@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/is-expression", - "repository_download_url": "https://registry.npmjs.org/is-expression/-/is-expression-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/is-expression/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "is-finite", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-finite@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/is-finite", - "repository_download_url": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/is-finite/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "is-lower-case", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-lower-case@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/is-lower-case", - "repository_download_url": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/is-lower-case/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "is-my-json-valid", - "version": "2.13.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-my-json-valid@2.13.1", - "repository_homepage_url": "https://www.npmjs.com/package/is-my-json-valid", - "repository_download_url": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz", - "api_data_url": "https://registry.npmjs.org/is-my-json-valid/2.13.1" - }, - { - "type": "npm", - "namespace": null, - "name": "is-promise", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-promise@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/is-promise", - "repository_download_url": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/is-promise/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "is-property", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-property@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/is-property", - "repository_download_url": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/is-property/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "is-regex", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-regex@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/is-regex", - "repository_download_url": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/is-regex/1.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "is-stream", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-stream@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/is-stream", - "repository_download_url": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/is-stream/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "is-typedarray", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-typedarray@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/is-typedarray", - "repository_download_url": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/is-typedarray/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "is-upper-case", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-upper-case@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/is-upper-case", - "repository_download_url": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/is-upper-case/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "is-utf8", - "version": "0.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/is-utf8@0.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/is-utf8", - "repository_download_url": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/is-utf8/0.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "isarray", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/isarray@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/isarray", - "repository_download_url": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/isarray/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "isexe", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/isexe@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/isexe", - "repository_download_url": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/isexe/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "isstream", - "version": "0.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/isstream@0.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/isstream", - "repository_download_url": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/isstream/0.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "jodid25519", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jodid25519@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/jodid25519", - "repository_download_url": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/jodid25519/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "js-base64", - "version": "2.1.9", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/js-base64@2.1.9", - "repository_homepage_url": "https://www.npmjs.com/package/js-base64", - "repository_download_url": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "api_data_url": "https://registry.npmjs.org/js-base64/2.1.9" - }, - { - "type": "npm", - "namespace": null, - "name": "js-stringify", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/js-stringify@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/js-stringify", - "repository_download_url": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/js-stringify/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "js-yaml", - "version": "3.5.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/js-yaml@3.5.5", - "repository_homepage_url": "https://www.npmjs.com/package/js-yaml", - "repository_download_url": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "api_data_url": "https://registry.npmjs.org/js-yaml/3.5.5" - }, - { - "type": "npm", - "namespace": null, - "name": "jsbn", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsbn@0.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/jsbn", - "repository_download_url": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/jsbn/0.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jscs", - "version": "3.0.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jscs/-/jscs-3.0.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/commander@2.9.0", - "extracted_requirement": ">=2.9.0 <2.10.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/glob@5.0.15", - "extracted_requirement": ">=5.0.1 <6.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/js-yaml@3.4.6", - "extracted_requirement": ">=3.4.0 <3.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/vow@0.4.12", - "extracted_requirement": ">=0.4.8 <0.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/vow-fs@0.3.5", - "extracted_requirement": ">=0.3.4 <0.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/vow-queue@0.4.2", - "extracted_requirement": ">=0.4.1 <0.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/jscs@3.0.7", - "repository_homepage_url": "https://www.npmjs.com/package/jscs", - "repository_download_url": "https://registry.npmjs.org/jscs/-/jscs-3.0.7.tgz", - "api_data_url": "https://registry.npmjs.org/jscs/3.0.7" - }, - { - "type": "npm", - "namespace": null, - "name": "jscs-jsdoc", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jscs-jsdoc@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/jscs-jsdoc", - "repository_download_url": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/jscs-jsdoc/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jscs-preset-wikimedia", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jscs-preset-wikimedia@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/jscs-preset-wikimedia", - "repository_download_url": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/jscs-preset-wikimedia/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jsdoctypeparser", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsdoctypeparser@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/jsdoctypeparser", - "repository_download_url": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/jsdoctypeparser/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jshint", - "version": "2.9.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jshint/-/jshint-2.9.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@3.7.0", - "extracted_requirement": ">=3.7.0 <3.8.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/minimatch@2.0.10", - "extracted_requirement": ">=2.0.0 <2.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/shelljs@0.3.0", - "extracted_requirement": ">=0.3.0 <0.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/jshint@2.9.2", - "repository_homepage_url": "https://www.npmjs.com/package/jshint", - "repository_download_url": "https://registry.npmjs.org/jshint/-/jshint-2.9.2.tgz", - "api_data_url": "https://registry.npmjs.org/jshint/2.9.2" - }, - { - "type": "npm", - "namespace": null, - "name": "json-schema", - "version": "0.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/json-schema@0.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/json-schema", - "repository_download_url": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/json-schema/0.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "json-stringify-safe", - "version": "5.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/json-stringify-safe@5.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/json-stringify-safe", - "repository_download_url": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/json-stringify-safe/5.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "jsonfile", - "version": "2.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsonfile@2.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/jsonfile", - "repository_download_url": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/jsonfile/2.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "jsonlint", - "version": "1.6.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsonlint@1.6.2", - "repository_homepage_url": "https://www.npmjs.com/package/jsonlint", - "repository_download_url": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "api_data_url": "https://registry.npmjs.org/jsonlint/1.6.2" - }, - { - "type": "npm", - "namespace": null, - "name": "jsonpointer", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsonpointer@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/jsonpointer", - "repository_download_url": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/jsonpointer/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jsprim", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jsprim@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/jsprim", - "repository_download_url": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/jsprim/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "jstransformer", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/jstransformer@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/jstransformer", - "repository_download_url": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/jstransformer/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "JSV", - "version": "4.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/JSV@4.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/JSV", - "repository_download_url": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/JSV/4.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "kew", - "version": "0.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/kew@0.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/kew", - "repository_download_url": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/kew/0.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "kind-of", - "version": "3.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/kind-of@3.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/kind-of", - "repository_download_url": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/kind-of/3.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "klaw", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/klaw/-/klaw-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/klaw@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/klaw", - "repository_download_url": "https://registry.npmjs.org/klaw/-/klaw-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/klaw/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "lazy-cache", - "version": "1.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lazy-cache@1.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/lazy-cache", - "repository_download_url": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/lazy-cache/1.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "lazystream", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lazystream@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/lazystream", - "repository_download_url": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/lazystream/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "less", - "version": "2.6.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/less/-/less-2.6.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/source-map@0.5.6", - "extracted_requirement": ">=0.5.3 <0.6.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/less@2.6.1", - "repository_homepage_url": "https://www.npmjs.com/package/less", - "repository_download_url": "https://registry.npmjs.org/less/-/less-2.6.1.tgz", - "api_data_url": "https://registry.npmjs.org/less/2.6.1" - }, - { - "type": "npm", - "namespace": null, - "name": "linkify-it", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/linkify-it@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/linkify-it", - "repository_download_url": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/linkify-it/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "livereload-js", - "version": "2.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/livereload-js@2.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/livereload-js", - "repository_download_url": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/livereload-js/2.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "load-grunt-tasks", - "version": "3.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/load-grunt-tasks@3.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/load-grunt-tasks", - "repository_download_url": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/load-grunt-tasks/3.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "load-json-file", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/load-json-file@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/load-json-file", - "repository_download_url": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/load-json-file/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "lodash", - "version": "3.10.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lodash@3.10.1", - "repository_homepage_url": "https://www.npmjs.com/package/lodash", - "repository_download_url": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "api_data_url": "https://registry.npmjs.org/lodash/3.10.1" - }, - { - "type": "npm", - "namespace": null, - "name": "longest", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/longest@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/longest", - "repository_download_url": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/longest/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "loud-rejection", - "version": "1.6.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/loud-rejection@1.6.0", - "repository_homepage_url": "https://www.npmjs.com/package/loud-rejection", - "repository_download_url": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "api_data_url": "https://registry.npmjs.org/loud-rejection/1.6.0" - }, - { - "type": "npm", - "namespace": null, - "name": "lower-case", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lower-case@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/lower-case", - "repository_download_url": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/lower-case/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "lower-case-first", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lower-case-first@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/lower-case-first", - "repository_download_url": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/lower-case-first/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "lru-cache", - "version": "2.7.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lru-cache@2.7.3", - "repository_homepage_url": "https://www.npmjs.com/package/lru-cache", - "repository_download_url": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "api_data_url": "https://registry.npmjs.org/lru-cache/2.7.3" - }, - { - "type": "npm", - "namespace": null, - "name": "map-obj", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/map-obj@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/map-obj", - "repository_download_url": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/map-obj/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "markdown-it", - "version": "7.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/markdown-it/-/markdown-it-7.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/entities@1.1.1", - "extracted_requirement": ">=1.1.1 <1.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/markdown-it@7.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/markdown-it", - "repository_download_url": "https://registry.npmjs.org/markdown-it/-/markdown-it-7.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/markdown-it/7.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "maxmin", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/pretty-bytes@1.0.4", - "extracted_requirement": ">=1.0.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/maxmin@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/maxmin", - "repository_download_url": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/maxmin/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "mdurl", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/mdurl@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/mdurl", - "repository_download_url": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/mdurl/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "media-typer", - "version": "0.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/media-typer@0.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/media-typer", - "repository_download_url": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/media-typer/0.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "meow", - "version": "3.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/meow@3.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/meow", - "repository_download_url": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/meow/3.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "mime", - "version": "1.3.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/mime@1.3.4", - "repository_homepage_url": "https://www.npmjs.com/package/mime", - "repository_download_url": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "api_data_url": "https://registry.npmjs.org/mime/1.3.4" - }, - { - "type": "npm", - "namespace": null, - "name": "mime-db", - "version": "1.23.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/mime-db@1.23.0", - "repository_homepage_url": "https://www.npmjs.com/package/mime-db", - "repository_download_url": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", - "api_data_url": "https://registry.npmjs.org/mime-db/1.23.0" - }, - { - "type": "npm", - "namespace": null, - "name": "mime-types", - "version": "2.1.11", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/mime-types@2.1.11", - "repository_homepage_url": "https://www.npmjs.com/package/mime-types", - "repository_download_url": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", - "api_data_url": "https://registry.npmjs.org/mime-types/2.1.11" - }, - { - "type": "npm", - "namespace": null, - "name": "minimatch", - "version": "3.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/minimatch@3.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/minimatch", - "repository_download_url": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/minimatch/3.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "minimist", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/minimist@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/minimist", - "repository_download_url": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/minimist/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "mkdirp", - "version": "0.5.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/minimist@0.0.8", - "extracted_requirement": "0.0.8", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/mkdirp@0.5.1", - "repository_homepage_url": "https://www.npmjs.com/package/mkdirp", - "repository_download_url": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "api_data_url": "https://registry.npmjs.org/mkdirp/0.5.1" - }, - { - "type": "npm", - "namespace": null, - "name": "morgan", - "version": "1.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/morgan@1.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/morgan", - "repository_download_url": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/morgan/1.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ms", - "version": "0.7.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ms@0.7.1", - "repository_homepage_url": "https://www.npmjs.com/package/ms", - "repository_download_url": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "api_data_url": "https://registry.npmjs.org/ms/0.7.1" - }, - { - "type": "npm", - "namespace": null, - "name": "multimatch", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/multimatch@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/multimatch", - "repository_download_url": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/multimatch/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "mute-stream", - "version": "0.0.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/mute-stream@0.0.6", - "repository_homepage_url": "https://www.npmjs.com/package/mute-stream", - "repository_download_url": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "api_data_url": "https://registry.npmjs.org/mute-stream/0.0.6" - }, - { - "type": "npm", - "namespace": null, - "name": "natural-compare", - "version": "1.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/natural-compare@1.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/natural-compare", - "repository_download_url": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/natural-compare/1.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "ncname", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ncname@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/ncname", - "repository_download_url": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/ncname/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ncp", - "version": "0.4.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ncp@0.4.2", - "repository_homepage_url": "https://www.npmjs.com/package/ncp", - "repository_download_url": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "api_data_url": "https://registry.npmjs.org/ncp/0.4.2" - }, - { - "type": "npm", - "namespace": null, - "name": "negotiator", - "version": "0.6.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/negotiator@0.6.1", - "repository_homepage_url": "https://www.npmjs.com/package/negotiator", - "repository_download_url": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "api_data_url": "https://registry.npmjs.org/negotiator/0.6.1" - }, - { - "type": "npm", - "namespace": null, - "name": "no-case", - "version": "2.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/no-case/-/no-case-2.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/no-case@2.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/no-case", - "repository_download_url": "https://registry.npmjs.org/no-case/-/no-case-2.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/no-case/2.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "node-int64", - "version": "0.4.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/node-int64@0.4.0", - "repository_homepage_url": "https://www.npmjs.com/package/node-int64", - "repository_download_url": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/node-int64/0.4.0" - }, - { - "type": "npm", - "namespace": null, - "name": "node-uuid", - "version": "1.4.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/node-uuid@1.4.7", - "repository_homepage_url": "https://www.npmjs.com/package/node-uuid", - "repository_download_url": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "api_data_url": "https://registry.npmjs.org/node-uuid/1.4.7" - }, - { - "type": "npm", - "namespace": null, - "name": "nomnom", - "version": "1.8.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ansi-styles@1.0.0", - "extracted_requirement": ">=1.0.0 <1.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/chalk@0.4.0", - "extracted_requirement": ">=0.4.0 <0.5.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/strip-ansi@0.1.1", - "extracted_requirement": ">=0.1.0 <0.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/nomnom@1.8.1", - "repository_homepage_url": "https://www.npmjs.com/package/nomnom", - "repository_download_url": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "api_data_url": "https://registry.npmjs.org/nomnom/1.8.1" - }, - { - "type": "npm", - "namespace": null, - "name": "nopt", - "version": "3.0.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/nopt@3.0.6", - "repository_homepage_url": "https://www.npmjs.com/package/nopt", - "repository_download_url": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "api_data_url": "https://registry.npmjs.org/nopt/3.0.6" - }, - { - "type": "npm", - "namespace": null, - "name": "normalize-package-data", - "version": "2.3.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/normalize-package-data@2.3.5", - "repository_homepage_url": "https://www.npmjs.com/package/normalize-package-data", - "repository_download_url": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "api_data_url": "https://registry.npmjs.org/normalize-package-data/2.3.5" - }, - { - "type": "npm", - "namespace": null, - "name": "normalize-path", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/normalize-path@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/normalize-path", - "repository_download_url": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/normalize-path/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "num2fraction", - "version": "1.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/num2fraction@1.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/num2fraction", - "repository_download_url": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/num2fraction/1.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "number-is-nan", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/number-is-nan@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/number-is-nan", - "repository_download_url": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/number-is-nan/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "oauth-sign", - "version": "0.8.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/oauth-sign@0.8.2", - "repository_homepage_url": "https://www.npmjs.com/package/oauth-sign", - "repository_download_url": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "api_data_url": "https://registry.npmjs.org/oauth-sign/0.8.2" - }, - { - "type": "npm", - "namespace": null, - "name": "object-assign", - "version": "4.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/object-assign@4.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/object-assign", - "repository_download_url": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/object-assign/4.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "on-finished", - "version": "2.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/on-finished@2.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/on-finished", - "repository_download_url": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/on-finished/2.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "on-headers", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/on-headers@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/on-headers", - "repository_download_url": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/on-headers/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "once", - "version": "1.3.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/once@1.3.3", - "repository_homepage_url": "https://www.npmjs.com/package/once", - "repository_download_url": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "api_data_url": "https://registry.npmjs.org/once/1.3.3" - }, - { - "type": "npm", - "namespace": null, - "name": "opn", - "version": "4.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/opn@4.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/opn", - "repository_download_url": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/opn/4.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "os-tmpdir", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/os-tmpdir@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/os-tmpdir", - "repository_download_url": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/os-tmpdir/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "package", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/package@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/package", - "repository_download_url": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/package/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pako", - "version": "0.2.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pako/-/pako-0.2.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pako@0.2.8", - "repository_homepage_url": "https://www.npmjs.com/package/pako", - "repository_download_url": "https://registry.npmjs.org/pako/-/pako-0.2.8.tgz", - "api_data_url": "https://registry.npmjs.org/pako/0.2.8" - }, - { - "type": "npm", - "namespace": null, - "name": "param-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/param-case/-/param-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/param-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/param-case", - "repository_download_url": "https://registry.npmjs.org/param-case/-/param-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/param-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "parse-json", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/parse-json@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/parse-json", - "repository_download_url": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/parse-json/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "parse-ms", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/parse-ms@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/parse-ms", - "repository_download_url": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/parse-ms/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "parserlib", - "version": "0.2.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/parserlib@0.2.5", - "repository_homepage_url": "https://www.npmjs.com/package/parserlib", - "repository_download_url": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", - "api_data_url": "https://registry.npmjs.org/parserlib/0.2.5" - }, - { - "type": "npm", - "namespace": null, - "name": "parseurl", - "version": "1.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/parseurl@1.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/parseurl", - "repository_download_url": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/parseurl/1.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pascal-case", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pascal-case@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/pascal-case", - "repository_download_url": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/pascal-case/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "path-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/path-case/-/path-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/path-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/path-case", - "repository_download_url": "https://registry.npmjs.org/path-case/-/path-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/path-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "path-exists", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/path-exists@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/path-exists", - "repository_download_url": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/path-exists/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "path-is-absolute", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/path-is-absolute@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/path-is-absolute", - "repository_download_url": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/path-is-absolute/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "path-type", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/path-type@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/path-type", - "repository_download_url": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/path-type/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pathval", - "version": "0.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pathval@0.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/pathval", - "repository_download_url": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/pathval/0.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pend", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pend@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/pend", - "repository_download_url": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/pend/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "phantomjs", - "version": "1.9.20", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/bl@1.0.3", - "extracted_requirement": ">=1.0.0 <1.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/qs@5.2.0", - "extracted_requirement": ">=5.2.0 <5.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/readable-stream@2.0.6", - "extracted_requirement": ">=2.0.5 <2.1.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/request@2.67.0", - "extracted_requirement": ">=2.67.0 <2.68.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/phantomjs@1.9.20", - "repository_homepage_url": "https://www.npmjs.com/package/phantomjs", - "repository_download_url": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", - "api_data_url": "https://registry.npmjs.org/phantomjs/1.9.20" - }, - { - "type": "npm", - "namespace": null, - "name": "pify", - "version": "2.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pify@2.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/pify", - "repository_download_url": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/pify/2.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pinkie", - "version": "2.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pinkie@2.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/pinkie", - "repository_download_url": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/pinkie/2.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "pinkie-promise", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pinkie-promise@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pinkie-promise", - "repository_download_url": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pinkie-promise/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pkg-up", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pkg-up@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/pkg-up", - "repository_download_url": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/pkg-up/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pkginfo", - "version": "0.4.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pkginfo@0.4.0", - "repository_homepage_url": "https://www.npmjs.com/package/pkginfo", - "repository_download_url": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", - "api_data_url": "https://registry.npmjs.org/pkginfo/0.4.0" - }, - { - "type": "npm", - "namespace": null, - "name": "plur", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/plur@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/plur", - "repository_download_url": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/plur/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "portscanner", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/portscanner/-/portscanner-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/async@0.1.15", - "extracted_requirement": "0.1.15", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/portscanner@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/portscanner", - "repository_download_url": "https://registry.npmjs.org/portscanner/-/portscanner-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/portscanner/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "postcss", - "version": "4.1.16", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/postcss@4.1.16", - "repository_homepage_url": "https://www.npmjs.com/package/postcss", - "repository_download_url": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", - "api_data_url": "https://registry.npmjs.org/postcss/4.1.16" - }, - { - "type": "npm", - "namespace": null, - "name": "pretty-bytes", - "version": "3.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pretty-bytes@3.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pretty-bytes", - "repository_download_url": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pretty-bytes/3.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pretty-ms", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pretty-ms@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/pretty-ms", - "repository_download_url": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/pretty-ms/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "process-nextick-args", - "version": "1.0.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/process-nextick-args@1.0.7", - "repository_homepage_url": "https://www.npmjs.com/package/process-nextick-args", - "repository_download_url": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "api_data_url": "https://registry.npmjs.org/process-nextick-args/1.0.7" - }, - { - "type": "npm", - "namespace": null, - "name": "progress", - "version": "1.1.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/progress@1.1.8", - "repository_homepage_url": "https://www.npmjs.com/package/progress", - "repository_download_url": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "api_data_url": "https://registry.npmjs.org/progress/1.1.8" - }, - { - "type": "npm", - "namespace": null, - "name": "promise", - "version": "7.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/promise@7.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/promise", - "repository_download_url": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/promise/7.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "prompt", - "version": "0.2.14", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/prompt@0.2.14", - "repository_homepage_url": "https://www.npmjs.com/package/prompt", - "repository_download_url": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "api_data_url": "https://registry.npmjs.org/prompt/0.2.14" - }, - { - "type": "npm", - "namespace": null, - "name": "prr", - "version": "0.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/prr@0.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/prr", - "repository_download_url": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/prr/0.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pug", - "version": "2.0.0-beta3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug@2.0.0-beta3", - "repository_homepage_url": "https://www.npmjs.com/package/pug", - "repository_download_url": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta3.tgz", - "api_data_url": "https://registry.npmjs.org/pug/2.0.0-beta3" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-attrs", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-attrs@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pug-attrs", - "repository_download_url": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pug-attrs/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-code-gen", - "version": "0.0.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-0.0.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-code-gen@0.0.7", - "repository_homepage_url": "https://www.npmjs.com/package/pug-code-gen", - "repository_download_url": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-0.0.7.tgz", - "api_data_url": "https://registry.npmjs.org/pug-code-gen/0.0.7" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-error", - "version": "1.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-error@1.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/pug-error", - "repository_download_url": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/pug-error/1.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-filters", - "version": "1.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-filters/-/pug-filters-1.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-filters@1.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/pug-filters", - "repository_download_url": "https://registry.npmjs.org/pug-filters/-/pug-filters-1.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/pug-filters/1.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-lexer", - "version": "2.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-2.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-lexer@2.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/pug-lexer", - "repository_download_url": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-2.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/pug-lexer/2.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-linker", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-linker/-/pug-linker-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-linker@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/pug-linker", - "repository_download_url": "https://registry.npmjs.org/pug-linker/-/pug-linker-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/pug-linker/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-load", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-load@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/pug-load", - "repository_download_url": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/pug-load/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-parser", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-parser@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pug-parser", - "repository_download_url": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pug-parser/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-runtime", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-runtime@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pug-runtime", - "repository_download_url": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pug-runtime/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-strip-comments", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/pug-error@0.0.0", - "extracted_requirement": ">=0.0.0 <0.0.1", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/pug-strip-comments@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/pug-strip-comments", - "repository_download_url": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/pug-strip-comments/0.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "pug-walk", - "version": "0.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/pug-walk/-/pug-walk-0.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/pug-walk@0.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/pug-walk", - "repository_download_url": "https://registry.npmjs.org/pug-walk/-/pug-walk-0.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/pug-walk/0.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "q", - "version": "1.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/q@1.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/q", - "repository_download_url": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/q/1.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "qs", - "version": "6.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/qs@6.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/qs", - "repository_download_url": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/qs/6.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "range-parser", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/range-parser@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/range-parser", - "repository_download_url": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/range-parser/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "raw-body", - "version": "2.1.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/bytes@2.4.0", - "extracted_requirement": "2.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/raw-body@2.1.7", - "repository_homepage_url": "https://www.npmjs.com/package/raw-body", - "repository_download_url": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "api_data_url": "https://registry.npmjs.org/raw-body/2.1.7" - }, - { - "type": "npm", - "namespace": null, - "name": "read", - "version": "1.0.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/read@1.0.7", - "repository_homepage_url": "https://www.npmjs.com/package/read", - "repository_download_url": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "api_data_url": "https://registry.npmjs.org/read/1.0.7" - }, - { - "type": "npm", - "namespace": null, - "name": "read-pkg", - "version": "1.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/read-pkg@1.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/read-pkg", - "repository_download_url": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/read-pkg/1.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "read-pkg-up", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/read-pkg-up@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/read-pkg-up", - "repository_download_url": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/read-pkg-up/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "readable-stream", - "version": "2.1.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/readable-stream@2.1.4", - "repository_homepage_url": "https://www.npmjs.com/package/readable-stream", - "repository_download_url": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.4.tgz", - "api_data_url": "https://registry.npmjs.org/readable-stream/2.1.4" - }, - { - "type": "npm", - "namespace": null, - "name": "rechoir", - "version": "0.6.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/rechoir@0.6.2", - "repository_homepage_url": "https://www.npmjs.com/package/rechoir", - "repository_download_url": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "api_data_url": "https://registry.npmjs.org/rechoir/0.6.2" - }, - { - "type": "npm", - "namespace": null, - "name": "redent", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/redent@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/redent", - "repository_download_url": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/redent/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "regenerator-runtime", - "version": "0.9.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/regenerator-runtime@0.9.5", - "repository_homepage_url": "https://www.npmjs.com/package/regenerator-runtime", - "repository_download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz", - "api_data_url": "https://registry.npmjs.org/regenerator-runtime/0.9.5" - }, - { - "type": "npm", - "namespace": null, - "name": "relateurl", - "version": "0.2.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/relateurl@0.2.6", - "repository_homepage_url": "https://www.npmjs.com/package/relateurl", - "repository_download_url": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.6.tgz", - "api_data_url": "https://registry.npmjs.org/relateurl/0.2.6" - }, - { - "type": "npm", - "namespace": null, - "name": "repeat-string", - "version": "1.5.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/repeat-string@1.5.4", - "repository_homepage_url": "https://www.npmjs.com/package/repeat-string", - "repository_download_url": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz", - "api_data_url": "https://registry.npmjs.org/repeat-string/1.5.4" - }, - { - "type": "npm", - "namespace": null, - "name": "repeating", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/repeating@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/repeating", - "repository_download_url": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/repeating/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "request", - "version": "2.73.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/request/-/request-2.73.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/request@2.73.0", - "repository_homepage_url": "https://www.npmjs.com/package/request", - "repository_download_url": "https://registry.npmjs.org/request/-/request-2.73.0.tgz", - "api_data_url": "https://registry.npmjs.org/request/2.73.0" - }, - { - "type": "npm", - "namespace": null, - "name": "request-progress", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/request-progress@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/request-progress", - "repository_download_url": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/request-progress/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "requestretry", - "version": "1.9.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/requestretry/-/requestretry-1.9.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/requestretry@1.9.0", - "repository_homepage_url": "https://www.npmjs.com/package/requestretry", - "repository_download_url": "https://registry.npmjs.org/requestretry/-/requestretry-1.9.0.tgz", - "api_data_url": "https://registry.npmjs.org/requestretry/1.9.0" - }, - { - "type": "npm", - "namespace": null, - "name": "reserved-words", - "version": "0.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/reserved-words@0.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/reserved-words", - "repository_download_url": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/reserved-words/0.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "resolve", - "version": "1.1.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/resolve@1.1.7", - "repository_homepage_url": "https://www.npmjs.com/package/resolve", - "repository_download_url": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "api_data_url": "https://registry.npmjs.org/resolve/1.1.7" - }, - { - "type": "npm", - "namespace": null, - "name": "resolve-from", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/resolve-from@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/resolve-from", - "repository_download_url": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/resolve-from/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "resolve-pkg", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/resolve-pkg@0.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/resolve-pkg", - "repository_download_url": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/resolve-pkg/0.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "revalidator", - "version": "0.1.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/revalidator@0.1.8", - "repository_homepage_url": "https://www.npmjs.com/package/revalidator", - "repository_download_url": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "api_data_url": "https://registry.npmjs.org/revalidator/0.1.8" - }, - { - "type": "npm", - "namespace": null, - "name": "right-align", - "version": "0.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/right-align@0.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/right-align", - "repository_download_url": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/right-align/0.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "rimraf", - "version": "2.2.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/rimraf@2.2.8", - "repository_homepage_url": "https://www.npmjs.com/package/rimraf", - "repository_download_url": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "api_data_url": "https://registry.npmjs.org/rimraf/2.2.8" - }, - { - "type": "npm", - "namespace": null, - "name": "sauce-tunnel", - "version": "2.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sauce-tunnel/-/sauce-tunnel-2.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/sauce-tunnel@2.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/sauce-tunnel", - "repository_download_url": "https://registry.npmjs.org/sauce-tunnel/-/sauce-tunnel-2.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/sauce-tunnel/2.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "saucelabs", - "version": "1.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/saucelabs@1.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/saucelabs", - "repository_download_url": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/saucelabs/1.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "semver", - "version": "5.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/semver/-/semver-5.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/semver@5.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/semver", - "repository_download_url": "https://registry.npmjs.org/semver/-/semver-5.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/semver/5.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "send", - "version": "0.14.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/send@0.14.1", - "repository_homepage_url": "https://www.npmjs.com/package/send", - "repository_download_url": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", - "api_data_url": "https://registry.npmjs.org/send/0.14.1" - }, - { - "type": "npm", - "namespace": null, - "name": "sentence-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/sentence-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/sentence-case", - "repository_download_url": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/sentence-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "serve-index", - "version": "1.8.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/serve-index@1.8.0", - "repository_homepage_url": "https://www.npmjs.com/package/serve-index", - "repository_download_url": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", - "api_data_url": "https://registry.npmjs.org/serve-index/1.8.0" - }, - { - "type": "npm", - "namespace": null, - "name": "serve-static", - "version": "1.11.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/serve-static@1.11.1", - "repository_homepage_url": "https://www.npmjs.com/package/serve-static", - "repository_download_url": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", - "api_data_url": "https://registry.npmjs.org/serve-static/1.11.1" - }, - { - "type": "npm", - "namespace": null, - "name": "setprototypeof", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/setprototypeof@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/setprototypeof", - "repository_download_url": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/setprototypeof/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "shelljs", - "version": "0.7.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/shelljs@0.7.0", - "repository_homepage_url": "https://www.npmjs.com/package/shelljs", - "repository_download_url": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.0.tgz", - "api_data_url": "https://registry.npmjs.org/shelljs/0.7.0" - }, - { - "type": "npm", - "namespace": null, - "name": "shx", - "version": "0.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/shx/-/shx-0.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/shx@0.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/shx", - "repository_download_url": "https://registry.npmjs.org/shx/-/shx-0.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/shx/0.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "sigmund", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/sigmund@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/sigmund", - "repository_download_url": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/sigmund/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "signal-exit", - "version": "3.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/signal-exit@3.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/signal-exit", - "repository_download_url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/signal-exit/3.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "snake-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/snake-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/snake-case", - "repository_download_url": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/snake-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "sntp", - "version": "1.0.9", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/sntp@1.0.9", - "repository_homepage_url": "https://www.npmjs.com/package/sntp", - "repository_download_url": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "api_data_url": "https://registry.npmjs.org/sntp/1.0.9" - }, - { - "type": "npm", - "namespace": null, - "name": "source-map", - "version": "0.4.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/source-map@0.4.4", - "repository_homepage_url": "https://www.npmjs.com/package/source-map", - "repository_download_url": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "api_data_url": "https://registry.npmjs.org/source-map/0.4.4" - }, - { - "type": "npm", - "namespace": null, - "name": "source-map-support", - "version": "0.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/source-map@0.1.32", - "extracted_requirement": "0.1.32", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/source-map-support@0.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/source-map-support", - "repository_download_url": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/source-map-support/0.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "spdx-correct", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/spdx-correct@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/spdx-correct", - "repository_download_url": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/spdx-correct/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "spdx-exceptions", - "version": "1.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/spdx-exceptions@1.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/spdx-exceptions", - "repository_download_url": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/spdx-exceptions/1.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "spdx-expression-parse", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/spdx-expression-parse@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/spdx-expression-parse", - "repository_download_url": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/spdx-expression-parse/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "spdx-license-ids", - "version": "1.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/spdx-license-ids@1.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/spdx-license-ids", - "repository_download_url": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/spdx-license-ids/1.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "split", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/split@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/split", - "repository_download_url": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/split/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "sprintf-js", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/sprintf-js@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/sprintf-js", - "repository_download_url": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/sprintf-js/1.0.3" - }, - { - "type": "npm", - "namespace": null, - "name": "sshpk", - "version": "1.8.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/sshpk/-/sshpk-1.8.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/assert-plus@1.0.0", - "extracted_requirement": ">=1.0.0 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/sshpk@1.8.3", - "repository_homepage_url": "https://www.npmjs.com/package/sshpk", - "repository_download_url": "https://registry.npmjs.org/sshpk/-/sshpk-1.8.3.tgz", - "api_data_url": "https://registry.npmjs.org/sshpk/1.8.3" - }, - { - "type": "npm", - "namespace": null, - "name": "stack-trace", - "version": "0.0.9", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/stack-trace@0.0.9", - "repository_homepage_url": "https://www.npmjs.com/package/stack-trace", - "repository_download_url": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "api_data_url": "https://registry.npmjs.org/stack-trace/0.0.9" - }, - { - "type": "npm", - "namespace": null, - "name": "statuses", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/statuses@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/statuses", - "repository_download_url": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/statuses/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "stream-buffers", - "version": "2.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/stream-buffers@2.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/stream-buffers", - "repository_download_url": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/stream-buffers/2.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "string_decoder", - "version": "0.10.31", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/string_decoder@0.10.31", - "repository_homepage_url": "https://www.npmjs.com/package/string_decoder", - "repository_download_url": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "api_data_url": "https://registry.npmjs.org/string_decoder/0.10.31" - }, - { - "type": "npm", - "namespace": null, - "name": "stringstream", - "version": "0.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/stringstream@0.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/stringstream", - "repository_download_url": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/stringstream/0.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "strip-ansi", - "version": "3.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/strip-ansi@3.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/strip-ansi", - "repository_download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/strip-ansi/3.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "strip-bom", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/strip-bom@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/strip-bom", - "repository_download_url": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/strip-bom/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "strip-indent", - "version": "1.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/strip-indent@1.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/strip-indent", - "repository_download_url": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/strip-indent/1.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "strip-json-comments", - "version": "1.0.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/strip-json-comments@1.0.4", - "repository_homepage_url": "https://www.npmjs.com/package/strip-json-comments", - "repository_download_url": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "api_data_url": "https://registry.npmjs.org/strip-json-comments/1.0.4" - }, - { - "type": "npm", - "namespace": null, - "name": "supports-color", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/supports-color@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/supports-color", - "repository_download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/supports-color/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "swap-case", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/swap-case@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/swap-case", - "repository_download_url": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/swap-case/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "tar-stream", - "version": "1.5.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/tar-stream@1.5.2", - "repository_homepage_url": "https://www.npmjs.com/package/tar-stream", - "repository_download_url": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", - "api_data_url": "https://registry.npmjs.org/tar-stream/1.5.2" - }, - { - "type": "npm", - "namespace": null, - "name": "temporary", - "version": "0.0.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/temporary@0.0.8", - "repository_homepage_url": "https://www.npmjs.com/package/temporary", - "repository_download_url": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", - "api_data_url": "https://registry.npmjs.org/temporary/0.0.8" - }, - { - "type": "npm", - "namespace": null, - "name": "text-table", - "version": "0.2.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/text-table@0.2.0", - "repository_homepage_url": "https://www.npmjs.com/package/text-table", - "repository_download_url": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "api_data_url": "https://registry.npmjs.org/text-table/0.2.0" - }, - { - "type": "npm", - "namespace": null, - "name": "throttleit", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/throttleit@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/throttleit", - "repository_download_url": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/throttleit/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "through", - "version": "2.3.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/through@2.3.8", - "repository_homepage_url": "https://www.npmjs.com/package/through", - "repository_download_url": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "api_data_url": "https://registry.npmjs.org/through/2.3.8" - }, - { - "type": "npm", - "namespace": null, - "name": "time-grunt", - "version": "1.3.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.3.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/time-grunt@1.3.0", - "repository_homepage_url": "https://www.npmjs.com/package/time-grunt", - "repository_download_url": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.3.0.tgz", - "api_data_url": "https://registry.npmjs.org/time-grunt/1.3.0" - }, - { - "type": "npm", - "namespace": null, - "name": "tiny-lr", - "version": "0.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/qs@5.1.0", - "extracted_requirement": ">=5.1.0 <5.2.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/tiny-lr@0.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/tiny-lr", - "repository_download_url": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/tiny-lr/0.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "title-case", - "version": "2.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/title-case/-/title-case-2.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/title-case@2.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/title-case", - "repository_download_url": "https://registry.npmjs.org/title-case/-/title-case-2.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/title-case/2.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "tmp", - "version": "0.0.28", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/tmp@0.0.28", - "repository_homepage_url": "https://www.npmjs.com/package/tmp", - "repository_download_url": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "api_data_url": "https://registry.npmjs.org/tmp/0.0.28" - }, - { - "type": "npm", - "namespace": null, - "name": "to-double-quotes", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/to-double-quotes@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/to-double-quotes", - "repository_download_url": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/to-double-quotes/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "to-single-quotes", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/to-single-quotes@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/to-single-quotes", - "repository_download_url": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/to-single-quotes/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "token-stream", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/token-stream@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/token-stream", - "repository_download_url": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/token-stream/0.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "tough-cookie", - "version": "2.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/tough-cookie@2.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/tough-cookie", - "repository_download_url": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/tough-cookie/2.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "trim-newlines", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/trim-newlines@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/trim-newlines", - "repository_download_url": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/trim-newlines/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "tunnel-agent", - "version": "0.4.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/tunnel-agent@0.4.3", - "repository_homepage_url": "https://www.npmjs.com/package/tunnel-agent", - "repository_download_url": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "api_data_url": "https://registry.npmjs.org/tunnel-agent/0.4.3" - }, - { - "type": "npm", - "namespace": null, - "name": "tweetnacl", - "version": "0.13.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/tweetnacl@0.13.3", - "repository_homepage_url": "https://www.npmjs.com/package/tweetnacl", - "repository_download_url": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz", - "api_data_url": "https://registry.npmjs.org/tweetnacl/0.13.3" - }, - { - "type": "npm", - "namespace": null, - "name": "type-is", - "version": "1.6.13", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/type-is@1.6.13", - "repository_homepage_url": "https://www.npmjs.com/package/type-is", - "repository_download_url": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", - "api_data_url": "https://registry.npmjs.org/type-is/1.6.13" - }, - { - "type": "npm", - "namespace": null, - "name": "typedarray", - "version": "0.0.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/typedarray@0.0.6", - "repository_homepage_url": "https://www.npmjs.com/package/typedarray", - "repository_download_url": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "api_data_url": "https://registry.npmjs.org/typedarray/0.0.6" - }, - { - "type": "npm", - "namespace": null, - "name": "uc.micro", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/uc.micro@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/uc.micro", - "repository_download_url": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/uc.micro/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "uglify-js", - "version": "2.6.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/async@0.2.10", - "extracted_requirement": ">=0.2.6 <0.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/source-map@0.5.6", - "extracted_requirement": ">=0.5.1 <0.6.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/uglify-js@2.6.4", - "repository_homepage_url": "https://www.npmjs.com/package/uglify-js", - "repository_download_url": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "api_data_url": "https://registry.npmjs.org/uglify-js/2.6.4" - }, - { - "type": "npm", - "namespace": null, - "name": "uglify-to-browserify", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/uglify-to-browserify@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/uglify-to-browserify", - "repository_download_url": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/uglify-to-browserify/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "underscore", - "version": "1.6.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/underscore@1.6.0", - "repository_homepage_url": "https://www.npmjs.com/package/underscore", - "repository_download_url": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "api_data_url": "https://registry.npmjs.org/underscore/1.6.0" - }, - { - "type": "npm", - "namespace": null, - "name": "underscore.string", - "version": "3.2.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/underscore.string@3.2.3", - "repository_homepage_url": "https://www.npmjs.com/package/underscore.string", - "repository_download_url": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "api_data_url": "https://registry.npmjs.org/underscore.string/3.2.3" - }, - { - "type": "npm", - "namespace": null, - "name": "unpipe", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/unpipe@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/unpipe", - "repository_download_url": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/unpipe/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "upper-case", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/upper-case@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/upper-case", - "repository_download_url": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/upper-case/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "upper-case-first", - "version": "1.1.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/upper-case-first@1.1.2", - "repository_homepage_url": "https://www.npmjs.com/package/upper-case-first", - "repository_download_url": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "api_data_url": "https://registry.npmjs.org/upper-case-first/1.1.2" - }, - { - "type": "npm", - "namespace": null, - "name": "uri-path", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/uri-path@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/uri-path", - "repository_download_url": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/uri-path/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "util-deprecate", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/util-deprecate@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/util-deprecate", - "repository_download_url": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/util-deprecate/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "utile", - "version": "0.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/async@0.2.10", - "extracted_requirement": ">=0.2.9 <0.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/utile@0.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/utile", - "repository_download_url": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/utile/0.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "utils-merge", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/utils-merge@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/utils-merge", - "repository_download_url": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/utils-merge/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "uuid", - "version": "2.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/uuid@2.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/uuid", - "repository_download_url": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/uuid/2.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "validate-npm-package-license", - "version": "3.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/validate-npm-package-license@3.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/validate-npm-package-license", - "repository_download_url": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/validate-npm-package-license/3.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "verror", - "version": "1.3.6", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/verror@1.3.6", - "repository_homepage_url": "https://www.npmjs.com/package/verror", - "repository_download_url": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "api_data_url": "https://registry.npmjs.org/verror/1.3.6" - }, - { - "type": "npm", - "namespace": null, - "name": "void-elements", - "version": "2.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/void-elements@2.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/void-elements", - "repository_download_url": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/void-elements/2.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "vow", - "version": "0.4.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/vow@0.4.4", - "repository_homepage_url": "https://www.npmjs.com/package/vow", - "repository_download_url": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz", - "api_data_url": "https://registry.npmjs.org/vow/0.4.4" - }, - { - "type": "npm", - "namespace": null, - "name": "vow-fs", - "version": "0.3.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/glob@3.2.8", - "extracted_requirement": "3.2.8", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/minimatch@0.2.14", - "extracted_requirement": ">=0.2.11 <0.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/node-uuid@1.4.0", - "extracted_requirement": "1.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/vow-fs@0.3.2", - "repository_homepage_url": "https://www.npmjs.com/package/vow-fs", - "repository_download_url": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz", - "api_data_url": "https://registry.npmjs.org/vow-fs/0.3.2" - }, - { - "type": "npm", - "namespace": null, - "name": "vow-queue", - "version": "0.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/vow-queue@0.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/vow-queue", - "repository_download_url": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/vow-queue/0.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "websocket-driver", - "version": "0.6.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/websocket-driver@0.6.5", - "repository_homepage_url": "https://www.npmjs.com/package/websocket-driver", - "repository_download_url": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "api_data_url": "https://registry.npmjs.org/websocket-driver/0.6.5" - }, - { - "type": "npm", - "namespace": null, - "name": "websocket-extensions", - "version": "0.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/websocket-extensions@0.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/websocket-extensions", - "repository_download_url": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/websocket-extensions/0.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "when", - "version": "3.7.7", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/when@3.7.7", - "repository_homepage_url": "https://www.npmjs.com/package/when", - "repository_download_url": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "api_data_url": "https://registry.npmjs.org/when/3.7.7" - }, - { - "type": "npm", - "namespace": null, - "name": "which", - "version": "1.2.10", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/which/-/which-1.2.10.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/which@1.2.10", - "repository_homepage_url": "https://www.npmjs.com/package/which", - "repository_download_url": "https://registry.npmjs.org/which/-/which-1.2.10.tgz", - "api_data_url": "https://registry.npmjs.org/which/1.2.10" - }, - { - "type": "npm", - "namespace": null, - "name": "window-size", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/window-size@0.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/window-size", - "repository_download_url": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/window-size/0.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "winston", - "version": "0.8.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/async@0.2.10", - "extracted_requirement": ">=0.2.0 <0.3.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/colors@0.6.2", - "extracted_requirement": ">=0.6.0 <0.7.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/pkginfo@0.3.1", - "extracted_requirement": ">=0.3.0 <0.4.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/winston@0.8.3", - "repository_homepage_url": "https://www.npmjs.com/package/winston", - "repository_download_url": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "api_data_url": "https://registry.npmjs.org/winston/0.8.3" - }, - { - "type": "npm", - "namespace": null, - "name": "with", - "version": "5.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/with@5.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/with", - "repository_download_url": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/with/5.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "wordwrap", - "version": "0.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/wordwrap@0.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/wordwrap", - "repository_download_url": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/wordwrap/0.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "wrappy", - "version": "1.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/wrappy@1.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/wrappy", - "repository_download_url": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/wrappy/1.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "xml-char-classes", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/xml-char-classes@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/xml-char-classes", - "repository_download_url": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/xml-char-classes/1.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "xmlbuilder", - "version": "3.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/xmlbuilder@3.1.0", - "repository_homepage_url": "https://www.npmjs.com/package/xmlbuilder", - "repository_download_url": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/xmlbuilder/3.1.0" - }, - { - "type": "npm", - "namespace": null, - "name": "xtend", - "version": "4.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/xtend@4.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/xtend", - "repository_download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/xtend/4.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "yargs", - "version": "3.10.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/camelcase@1.2.1", - "extracted_requirement": ">=1.0.2 <2.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/yargs@3.10.0", - "repository_homepage_url": "https://www.npmjs.com/package/yargs", - "repository_download_url": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "api_data_url": "https://registry.npmjs.org/yargs/3.10.0" - }, - { - "type": "npm", - "namespace": null, - "name": "yauzl", - "version": "2.4.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/yauzl@2.4.1", - "repository_homepage_url": "https://www.npmjs.com/package/yauzl", - "repository_download_url": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "api_data_url": "https://registry.npmjs.org/yauzl/2.4.1" - }, - { - "type": "npm", - "namespace": null, - "name": "zip-stream", - "version": "1.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/lodash@4.13.1", - "extracted_requirement": ">=4.8.0 <5.0.0", - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/zip-stream@1.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/zip-stream", - "repository_download_url": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/zip-stream/1.0.0" + "api_data_url": "https://registry.npmjs.org/bootstrap/3.3.7", + "datasource_id": "npm_shrinkwrap_json", + "purl": "pkg:npm/bootstrap@3.3.7" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/old_registry/package.json.expected b/tests/packagedcode/data/npm/old_registry/package.json.expected index fd69e8a2f51..954e501a4f5 100644 --- a/tests/packagedcode/data/npm/old_registry/package.json.expected +++ b/tests/packagedcode/data/npm/old_registry/package.json.expected @@ -47,13 +47,14 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/automatta@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/automatta", "repository_download_url": "https://registry.npmjs.org/automatta/-/automatta-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/automatta/0.0.1" + "api_data_url": "https://registry.npmjs.org/automatta/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/automatta@0.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/package-lock-v1/package-lock.json b/tests/packagedcode/data/npm/package-lock-v1/package-lock.json new file mode 100644 index 00000000000..44866bcdba7 --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v1/package-lock.json @@ -0,0 +1,70 @@ +{ + "name": "babel-runtime", + "version": "6.23.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.25.0", + "babel-template": "6.25.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.25.0" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.25.0" + } + }, + "babel-runtime": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", + "dev": true, + "requires": { + "core-js": "2.5.0" + } + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true, + "requires": { + "babel-runtime": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } +} diff --git a/tests/packagedcode/data/npm/package-lock-v1/package-lock.json-expected b/tests/packagedcode/data/npm/package-lock-v1/package-lock.json-expected new file mode 100644 index 00000000000..76c50ab23c9 --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v1/package-lock.json-expected @@ -0,0 +1,528 @@ +[ + { + "type": "npm", + "namespace": "", + "name": "babel-runtime", + "version": "6.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "lockfile_version": 1 + }, + "dependencies": [ + { + "purl": "pkg:npm/ansi-regex@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-regex", + "version": "2.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "size": null, + "sha1": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ansi-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", + "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-regex/2.1.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-regex@2.1.1" + } + }, + { + "purl": "pkg:npm/babel-helpers@6.24.1", + "extracted_requirement": "6.24.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-helpers", + "version": "6.24.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "size": null, + "sha1": "3471de9caec388e5c850e597e58a26ddf37602b2", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-helpers", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/babel-runtime", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babel-template", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-helpers", + "repository_download_url": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "api_data_url": "https://registry.npmjs.org/babel-helpers/6.24.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-helpers@6.24.1" + } + }, + { + "purl": "pkg:npm/babel-messages@6.23.0", + "extracted_requirement": "6.23.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-messages", + "version": "6.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "size": null, + "sha1": "f3cdf4703858035b2a2951c6ec5edf6c62f2630e", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-messages", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/babel-runtime", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-messages", + "repository_download_url": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-messages/6.23.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-messages@6.23.0" + } + }, + { + "purl": "pkg:npm/babel-plugin-transform-runtime@6.23.0", + "extracted_requirement": "6.23.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-plugin-transform-runtime", + "version": "6.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "size": null, + "sha1": "88490d446502ea9b8e7efb0fe09ec4d99479b1ee", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-plugin-transform-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/babel-runtime", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-plugin-transform-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/6.23.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-plugin-transform-runtime@6.23.0" + } + }, + { + "purl": "pkg:npm/babel-runtime@6.25.0", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-runtime", + "version": "6.25.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "size": null, + "sha1": "33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/core-js", + "extracted_requirement": "2.5.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-runtime/6.25.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-runtime@6.25.0" + } + }, + { + "purl": "pkg:npm/babel-template@6.25.0", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-template", + "version": "6.25.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "size": null, + "sha1": "665241166b7c2aa4c619d71e192969552b10c071", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "babel-template", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/babel-runtime", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babel-traverse", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babel-types", + "extracted_requirement": "6.25.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babylon", + "extracted_requirement": "6.18.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lodash", + "extracted_requirement": "4.17.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-template", + "repository_download_url": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-template/6.25.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-template@6.25.0" + } + }, + { + "purl": "pkg:npm/to-fast-properties@1.0.3", + "extracted_requirement": "1.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-fast-properties", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "size": null, + "sha1": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-fast-properties", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", + "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/to-fast-properties@1.0.3" + } + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-runtime/6.23.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-runtime@6.23.0" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json b/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json new file mode 100644 index 00000000000..f0a9f8d5862 --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json @@ -0,0 +1,132 @@ +{ + "name": "megak", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "megak", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "nodemon": "^2.0.9", + "ts-node-dev": "^1.1.8" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "peer": true + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json-expected b/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json-expected new file mode 100644 index 00000000000..f23029045a9 --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v2-2/package-lock.json-expected @@ -0,0 +1,706 @@ +[ + { + "type": "npm", + "namespace": "", + "name": "megak", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "lockfile_version": 2 + }, + "dependencies": [ + { + "purl": "pkg:npm/megak@1.0.0", + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "megak", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": "ISC", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/megak", + "repository_download_url": "https://registry.npmjs.org/megak/-/megak-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/megak/1.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/megak@1.0.0" + } + }, + { + "purl": "pkg:npm/%40szmarczak/http-timer@1.1.2", + "extracted_requirement": "1.1.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "@szmarczak", + "name": "http-timer", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "5c80765dbcc74cdea27888df20c57d86555c7cf536eacdaf69f61641c6475971cec62691658103284c1d975dbd672839d3e7e8615da30a0b6ba9203aa8db8d48", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/@szmarczak/http-timer", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/defer-to-connect", + "extracted_requirement": "^1.0.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/@szmarczak/http-timer", + "repository_download_url": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/@szmarczak%2fhttp-timer", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/%40szmarczak/http-timer@1.1.2" + } + }, + { + "purl": "pkg:npm/ansi-align@3.0.0", + "extracted_requirement": "3.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-align", + "version": "3.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "6690a554aa973774460662a26dd7d6cea098e259e312ea0dcd4e53d28105a5f77fcf9a891d56abba4ae2743e23b8b3b6157322c14431afd5aa42d6986bc5d163", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/ansi-align", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/string-width", + "extracted_requirement": "^3.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-align", + "repository_download_url": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-align/3.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-align@3.0.0" + } + }, + { + "purl": "pkg:npm/ansi-regex@4.1.0", + "extracted_requirement": "4.1.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-regex", + "version": "4.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "d5aa5e3df5ccd54392ab0d28f48885028bd5cfd3394b50e0fb84eb0f07cc7b043aa7fae632e79beed5998d0d6bc782e8cb502b060828a86a5faaa748e2ba2776", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/ansi-align/node_modules/ansi-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", + "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-regex/4.1.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-regex@4.1.0" + } + }, + { + "purl": "pkg:npm/ansi-styles@4.3.0", + "extracted_requirement": "4.3.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-styles", + "version": "4.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "cdb07dac22404f5adb8e25436f686a2851cd60bc60b64f0d511c59dc86700f717a36dc5b5d94029e74a2d4b931f880e885d3e5169db6db05402c885e64941212", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/ansi-styles", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/color-convert", + "extracted_requirement": "^2.0.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-styles", + "repository_download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-styles/4.3.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-styles@4.3.0" + } + }, + { + "purl": "pkg:npm/configstore@5.0.1", + "extracted_requirement": "5.0.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "configstore", + "version": "5.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "68c2a9ae093962104dc87db9863f301addbe0f9d92c350d1448cea0702e9d986bd985998f0a3efbedbe69daf12c5547d24c678933303ebc376daf95a46991e14", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/configstore", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/dot-prop", + "extracted_requirement": "^5.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "^4.1.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/make-dir", + "extracted_requirement": "^3.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/unique-string", + "extracted_requirement": "^2.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "^3.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/xdg-basedir", + "extracted_requirement": "^4.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/configstore", + "repository_download_url": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/configstore/5.0.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/configstore@5.0.1" + } + }, + { + "purl": "pkg:npm/fsevents@2.3.2", + "extracted_requirement": "2.3.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "fsevents", + "version": "2.3.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "c62a8c411e3101e1d3b81f6e5a6f9f1517083a02813223813fe7978b24fb8ec8150aad5b915ca0b74d28012a3007b11db6938769a3e02adf35d8ff5a6fe0c328", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/fsevents", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/fsevents", + "repository_download_url": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "api_data_url": "https://registry.npmjs.org/fsevents/2.3.2", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/fsevents@2.3.2" + } + }, + { + "purl": "pkg:npm/typescript@4.5.4", + "extracted_requirement": "4.5.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "typescript", + "version": "4.5.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "56062cd80d90211b86a61b73155eda40976e2768327d39639e02f38e97d6f45a18645eb1bb0d56d2f5bd82108a2df716ac21712bcd42486440bd2d699f87c852", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "typescript", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/typescript", + "repository_download_url": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "api_data_url": "https://registry.npmjs.org/typescript/4.5.4", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/typescript@4.5.4" + } + }, + { + "purl": "pkg:npm/undefsafe@2.0.3", + "extracted_requirement": "2.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "undefsafe", + "version": "2.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "9eb5d9c305eb0ff4ff2577b2809a9d08ee8d659d4beba1ebc4cfd9ee622ada83da9e83741759cbc7797024cbba030258ebd85d8b168540eba862c323139fc2d8", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "undefsafe", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/debug", + "extracted_requirement": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ms", + "extracted_requirement": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/undefsafe", + "repository_download_url": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/undefsafe/2.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/undefsafe@2.0.3" + } + }, + { + "purl": "pkg:npm/yn@3.1.1", + "extracted_requirement": "3.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yn", + "version": "3.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "531e328065acbb673b8ac1567bc62ed5896e266a95871a8ad9c2d735003901c0b741f6c636933b7eed18f1bff3d7aa572e7171658bd685dddf84163d0cb982e9", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "yn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yn", + "repository_download_url": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/yn/3.1.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/yn@3.1.1" + } + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/megak", + "repository_download_url": "https://registry.npmjs.org/megak/-/megak-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/megak/1.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/megak@1.0.0" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/package-lock-v2/package-lock.json b/tests/packagedcode/data/npm/package-lock-v2/package-lock.json new file mode 100644 index 00000000000..a27a7592ed5 --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v2/package-lock.json @@ -0,0 +1,53 @@ +{ + "name": "megak", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "megak", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "nodemon": "^2.0.9", + "ts-node-dev": "^1.1.8" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/tests/packagedcode/data/npm/package-lock-v2/package-lock.json-expected b/tests/packagedcode/data/npm/package-lock-v2/package-lock.json-expected new file mode 100644 index 00000000000..f5842dfd6fa --- /dev/null +++ b/tests/packagedcode/data/npm/package-lock-v2/package-lock.json-expected @@ -0,0 +1,365 @@ +[ + { + "type": "npm", + "namespace": "", + "name": "megak", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "lockfile_version": 2 + }, + "dependencies": [ + { + "purl": "pkg:npm/megak@1.0.0", + "extracted_requirement": "1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "megak", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": "ISC", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/megak", + "repository_download_url": "https://registry.npmjs.org/megak/-/megak-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/megak/1.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/megak@1.0.0" + } + }, + { + "purl": "pkg:npm/%40sindresorhus/is@0.14.0", + "extracted_requirement": "0.14.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "@sindresorhus", + "name": "is", + "version": "0.14.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "f4d113f75d0335a20f9e06272cb3de83e3a0ceab22f6e3389926e8539cbaa7c4b90f3313544b0966b6b08be0680cd51505ad83849a9061416f3037e0534eb62d", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "node_modules/@sindresorhus/is", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/@sindresorhus/is", + "repository_download_url": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "api_data_url": "https://registry.npmjs.org/@sindresorhus%2fis", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/%40sindresorhus/is@0.14.0" + } + }, + { + "purl": "pkg:npm/ini@1.3.7", + "extracted_requirement": "1.3.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ini", + "version": "1.3.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "88aa51a573fe0ab3f68f2af1be0d64314a570f24541435aeaf16e7553d6f40fc7e5b3f6e098b0c22a62e4812d5f8f01a646fddee444b29115cf680ccb07fa615", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ini", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ini", + "repository_download_url": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "api_data_url": "https://registry.npmjs.org/ini/1.3.7", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ini@1.3.7" + } + }, + { + "purl": "pkg:npm/is-binary-path@2.1.0", + "extracted_requirement": "2.1.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "is-binary-path", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "64c11161eb3aa43c9dcae1a276c7bb3ac1f1b5b23b595794128ce047f83baddd31522998365bd9444fcad8c8194e35b2ef6e487de94b79570433dee69ad4465f", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "is-binary-path", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/is-binary-path", + "repository_download_url": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-binary-path/2.1.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/is-binary-path@2.1.0" + } + }, + { + "purl": "pkg:npm/xtend@4.0.2", + "extracted_requirement": "4.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xtend", + "version": "4.0.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "2ca614d620172575200179fd5118e2bbe3168725171ecbdfa7b99cb989bd75250a2b4fc28edad4c050310fcdbf98259bb4bb068c521a774c08b28778ceb4c011", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "xtend", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xtend", + "repository_download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "api_data_url": "https://registry.npmjs.org/xtend/4.0.2", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/xtend@4.0.2" + } + }, + { + "purl": "pkg:npm/yn@3.1.1", + "extracted_requirement": "3.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yn", + "version": "3.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "531e328065acbb673b8ac1567bc62ed5896e266a95871a8ad9c2d735003901c0b741f6c636933b7eed18f1bff3d7aa572e7171658bd685dddf84163d0cb982e9", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "yn", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yn", + "repository_download_url": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/yn/3.1.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/yn@3.1.1" + } + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/megak", + "repository_download_url": "https://registry.npmjs.org/megak/-/megak-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/megak/1.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/megak@1.0.0" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/package-lock/package-lock.json b/tests/packagedcode/data/npm/package-lock/package-lock.json deleted file mode 100644 index 78600f94015..00000000000 --- a/tests/packagedcode/data/npm/package-lock/package-lock.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "name": "babel-runtime", - "version": "6.23.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.25.0", - "babel-template": "6.25.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.25.0" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.25.0" - } - }, - "babel-runtime": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", - "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", - "dev": true, - "requires": { - "core-js": "2.5.0" - } - }, - "babel-template": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true, - "requires": { - "babel-runtime": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.18.0", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true, - "requires": { - "babel-runtime": "6.25.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "core-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=" - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } -} diff --git a/tests/packagedcode/data/npm/package-lock/package-lock.json-expected b/tests/packagedcode/data/npm/package-lock/package-lock.json-expected deleted file mode 100644 index 65480897237..00000000000 --- a/tests/packagedcode/data/npm/package-lock/package-lock.json-expected +++ /dev/null @@ -1,1564 +0,0 @@ -[ - { - "type": "npm", - "namespace": null, - "name": "babel-runtime", - "version": "6.23.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "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, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/core-js@2.5.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/regenerator-runtime@0.11.0", - "extracted_requirement": null, - "scope": "dependencies", - "is_runtime": true, - "is_optional": false, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/ansi-regex@2.1.1", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/ansi-styles@2.2.1", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-code-frame@6.22.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-helpers@6.24.1", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-messages@6.23.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-plugin-transform-runtime@6.23.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-template@6.25.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-traverse@6.25.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-types@6.25.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babylon@6.18.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/chalk@1.1.3", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/debug@2.6.8", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/escape-string-regexp@1.0.5", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/esutils@2.0.2", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/globals@9.18.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/has-ansi@2.0.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/invariant@2.2.2", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/js-tokens@3.0.2", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/lodash@4.17.4", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/loose-envify@1.3.1", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/ms@2.0.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/strip-ansi@3.0.1", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/supports-color@2.0.0", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/to-fast-properties@1.0.3", - "extracted_requirement": null, - "scope": "dependencies-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-runtime@6.23.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", - "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-runtime/6.23.0" - }, - { - "type": "npm", - "namespace": null, - "name": "core-js", - "version": "2.5.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/core-js@2.5.0", - "repository_homepage_url": "https://www.npmjs.com/package/core-js", - "repository_download_url": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "api_data_url": "https://registry.npmjs.org/core-js/2.5.0" - }, - { - "type": "npm", - "namespace": null, - "name": "regenerator-runtime", - "version": "0.11.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/regenerator-runtime@0.11.0", - "repository_homepage_url": "https://www.npmjs.com/package/regenerator-runtime", - "repository_download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "api_data_url": "https://registry.npmjs.org/regenerator-runtime/0.11.0" - }, - { - "type": "npm", - "namespace": null, - "name": "ansi-regex", - "version": "2.1.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ansi-regex@2.1.1", - "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", - "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "api_data_url": "https://registry.npmjs.org/ansi-regex/2.1.1" - }, - { - "type": "npm", - "namespace": null, - "name": "ansi-styles", - "version": "2.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ansi-styles@2.2.1", - "repository_homepage_url": "https://www.npmjs.com/package/ansi-styles", - "repository_download_url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "api_data_url": "https://registry.npmjs.org/ansi-styles/2.2.1" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-code-frame", - "version": "6.22.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/chalk@1.1.3", - "extracted_requirement": "1.1.3", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/esutils@2.0.2", - "extracted_requirement": "2.0.2", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/js-tokens@3.0.2", - "extracted_requirement": "3.0.2", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-code-frame@6.22.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-code-frame", - "repository_download_url": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-code-frame/6.22.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-helpers", - "version": "6.24.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-template@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-helpers@6.24.1", - "repository_homepage_url": "https://www.npmjs.com/package/babel-helpers", - "repository_download_url": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "api_data_url": "https://registry.npmjs.org/babel-helpers/6.24.1" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-messages", - "version": "6.23.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-messages@6.23.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-messages", - "repository_download_url": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-messages/6.23.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-plugin-transform-runtime", - "version": "6.23.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-plugin-transform-runtime@6.23.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-plugin-transform-runtime", - "repository_download_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-plugin-transform-runtime/6.23.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-runtime", - "version": "6.25.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/core-js@2.5.0", - "extracted_requirement": "2.5.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-runtime@6.25.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", - "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-runtime/6.25.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-template", - "version": "6.25.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-traverse@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-types@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babylon@6.18.0", - "extracted_requirement": "6.18.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/lodash@4.17.4", - "extracted_requirement": "4.17.4", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-template@6.25.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-template", - "repository_download_url": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-template/6.25.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-traverse", - "version": "6.25.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-code-frame@6.22.0", - "extracted_requirement": "6.22.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-messages@6.23.0", - "extracted_requirement": "6.23.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babel-types@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/babylon@6.18.0", - "extracted_requirement": "6.18.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/debug@2.6.8", - "extracted_requirement": "2.6.8", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/globals@9.18.0", - "extracted_requirement": "9.18.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/invariant@2.2.2", - "extracted_requirement": "2.2.2", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/lodash@4.17.4", - "extracted_requirement": "4.17.4", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-traverse@6.25.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-traverse", - "repository_download_url": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-traverse/6.25.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babel-types", - "version": "6.25.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/babel-runtime@6.25.0", - "extracted_requirement": "6.25.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/esutils@2.0.2", - "extracted_requirement": "2.0.2", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/lodash@4.17.4", - "extracted_requirement": "4.17.4", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/to-fast-properties@1.0.3", - "extracted_requirement": "1.0.3", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/babel-types@6.25.0", - "repository_homepage_url": "https://www.npmjs.com/package/babel-types", - "repository_download_url": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "api_data_url": "https://registry.npmjs.org/babel-types/6.25.0" - }, - { - "type": "npm", - "namespace": null, - "name": "babylon", - "version": "6.18.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/babylon@6.18.0", - "repository_homepage_url": "https://www.npmjs.com/package/babylon", - "repository_download_url": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "api_data_url": "https://registry.npmjs.org/babylon/6.18.0" - }, - { - "type": "npm", - "namespace": null, - "name": "chalk", - "version": "1.1.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ansi-styles@2.2.1", - "extracted_requirement": "2.2.1", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/escape-string-regexp@1.0.5", - "extracted_requirement": "1.0.5", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/has-ansi@2.0.0", - "extracted_requirement": "2.0.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/strip-ansi@3.0.1", - "extracted_requirement": "3.0.1", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - }, - { - "purl": "pkg:npm/supports-color@2.0.0", - "extracted_requirement": "2.0.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/chalk@1.1.3", - "repository_homepage_url": "https://www.npmjs.com/package/chalk", - "repository_download_url": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/chalk/1.1.3" - }, - { - "type": "npm", - "namespace": null, - "name": "debug", - "version": "2.6.8", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ms@2.0.0", - "extracted_requirement": "2.0.0", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/debug@2.6.8", - "repository_homepage_url": "https://www.npmjs.com/package/debug", - "repository_download_url": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "api_data_url": "https://registry.npmjs.org/debug/2.6.8" - }, - { - "type": "npm", - "namespace": null, - "name": "escape-string-regexp", - "version": "1.0.5", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/escape-string-regexp@1.0.5", - "repository_homepage_url": "https://www.npmjs.com/package/escape-string-regexp", - "repository_download_url": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "api_data_url": "https://registry.npmjs.org/escape-string-regexp/1.0.5" - }, - { - "type": "npm", - "namespace": null, - "name": "esutils", - "version": "2.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/esutils@2.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/esutils", - "repository_download_url": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/esutils/2.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "globals", - "version": "9.18.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/globals@9.18.0", - "repository_homepage_url": "https://www.npmjs.com/package/globals", - "repository_download_url": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "api_data_url": "https://registry.npmjs.org/globals/9.18.0" - }, - { - "type": "npm", - "namespace": null, - "name": "has-ansi", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ansi-regex@2.1.1", - "extracted_requirement": "2.1.1", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/has-ansi@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/has-ansi", - "repository_download_url": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/has-ansi/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "invariant", - "version": "2.2.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/loose-envify@1.3.1", - "extracted_requirement": "1.3.1", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/invariant@2.2.2", - "repository_homepage_url": "https://www.npmjs.com/package/invariant", - "repository_download_url": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "api_data_url": "https://registry.npmjs.org/invariant/2.2.2" - }, - { - "type": "npm", - "namespace": null, - "name": "js-tokens", - "version": "3.0.2", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/js-tokens@3.0.2", - "repository_homepage_url": "https://www.npmjs.com/package/js-tokens", - "repository_download_url": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/js-tokens/3.0.2" - }, - { - "type": "npm", - "namespace": null, - "name": "lodash", - "version": "4.17.4", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/lodash@4.17.4", - "repository_homepage_url": "https://www.npmjs.com/package/lodash", - "repository_download_url": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "api_data_url": "https://registry.npmjs.org/lodash/4.17.4" - }, - { - "type": "npm", - "namespace": null, - "name": "loose-envify", - "version": "1.3.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/js-tokens@3.0.2", - "extracted_requirement": "3.0.2", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/loose-envify@1.3.1", - "repository_homepage_url": "https://www.npmjs.com/package/loose-envify", - "repository_download_url": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "api_data_url": "https://registry.npmjs.org/loose-envify/1.3.1" - }, - { - "type": "npm", - "namespace": null, - "name": "ms", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/ms@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/ms", - "repository_download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/ms/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "strip-ansi", - "version": "3.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:npm/ansi-regex@2.1.1", - "extracted_requirement": "2.1.1", - "scope": "requires-dev", - "is_runtime": false, - "is_optional": true, - "is_resolved": true, - "resolved_package": {} - } - ], - "purl": "pkg:npm/strip-ansi@3.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/strip-ansi", - "repository_download_url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/strip-ansi/3.0.1" - }, - { - "type": "npm", - "namespace": null, - "name": "supports-color", - "version": "2.0.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/supports-color@2.0.0", - "repository_homepage_url": "https://www.npmjs.com/package/supports-color", - "repository_download_url": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/supports-color/2.0.0" - }, - { - "type": "npm", - "namespace": null, - "name": "to-fast-properties", - "version": "1.0.3", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [], - "purl": "pkg:npm/to-fast-properties@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", - "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3" - } -] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/repo_url/package.json.expected b/tests/packagedcode/data/npm/repo_url/package.json.expected index 74ebb331bff..0fb2055ddc8 100644 --- a/tests/packagedcode/data/npm/repo_url/package.json.expected +++ b/tests/packagedcode/data/npm/repo_url/package.json.expected @@ -40,8 +40,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -333,9 +333,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/react-mobile-navigation-modal@0.1.0-rc.3", "repository_homepage_url": "https://www.npmjs.com/package/react-mobile-navigation-modal", "repository_download_url": "https://registry.npmjs.org/react-mobile-navigation-modal/-/react-mobile-navigation-modal-0.1.0-rc.3.tgz", - "api_data_url": "https://registry.npmjs.org/react-mobile-navigation-modal/0.1.0-rc.3" + "api_data_url": "https://registry.npmjs.org/react-mobile-navigation-modal/0.1.0-rc.3", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/react-mobile-navigation-modal@0.1.0-rc.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/scan-nested/scan.expected.json b/tests/packagedcode/data/npm/scan-nested/scan.expected.json new file mode 100644 index 00000000000..711bb6bf008 --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan.expected.json @@ -0,0 +1,1619 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json": "", + "--package": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 5 + } + } + ], + "dependencies": [ + { + "purl": "pkg:npm/lodash._baseclone", + "extracted_requirement": "~4.5.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lodash._baseclone?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/ms@2.0.0", + "extracted_requirement": "2.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ms", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "size": null, + "sha1": "5608aeadfc00be6c2901df5f9861788de0d597c8", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ms", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ms", + "repository_download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/ms/2.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ms@2.0.0" + }, + "dependency_uid": "pkg:npm/ms@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package-lock.json", + "datasource_id": "npm_package_lock_json" + }, + { + "purl": "pkg:npm/regenerator-runtime@0.11.0", + "extracted_requirement": "0.11.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "regenerator-runtime", + "version": "0.11.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "fda03490b7916f937d2b47787f0ee8a046c8fb10def83283e3df4442aca01aa792f0ddf1b68d79a74f6e636c63ee2c4ff35b0d3d7bd12e701022a7554ad81bd4", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "regenerator-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/regenerator-runtime", + "repository_download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "api_data_url": "https://registry.npmjs.org/regenerator-runtime/0.11.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/regenerator-runtime@0.11.0" + }, + "dependency_uid": "pkg:npm/regenerator-runtime@0.11.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package-lock.json", + "datasource_id": "npm_package_lock_json" + }, + { + "purl": "pkg:npm/to-fast-properties@1.0.3", + "extracted_requirement": "1.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-fast-properties", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "size": null, + "sha1": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-fast-properties", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", + "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/to-fast-properties@1.0.3" + }, + "dependency_uid": "pkg:npm/to-fast-properties@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package-lock.json", + "datasource_id": "npm_package_lock_json" + }, + { + "purl": "pkg:npm/bluebird", + "extracted_requirement": "^3.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/bluebird?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/wkx", + "extracted_requirement": "0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/wkx?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/chai", + "extracted_requirement": "^3.5.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chai?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/chai-as-promised", + "extracted_requirement": "^5.1.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chai-as-promised?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/watchr", + "extracted_requirement": "~2.4.11", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/watchr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/ansi-regex@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-regex", + "version": "2.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "size": null, + "sha1": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ansi-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", + "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-regex/2.1.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-regex@2.1.1" + }, + "dependency_uid": "pkg:npm/ansi-regex@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package-lock.json", + "datasource_id": "npm_package_lock_json" + }, + { + "purl": "pkg:npm/to-fast-properties@1.0.3", + "extracted_requirement": "1.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-fast-properties", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "size": null, + "sha1": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-fast-properties", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", + "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/to-fast-properties@1.0.3" + }, + "dependency_uid": "pkg:npm/to-fast-properties@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/package-lock.json", + "datasource_id": "npm_package_lock_json" + }, + { + "purl": "pkg:npm/abbrev@1.0.9", + "extracted_requirement": "1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "abbrev", + "version": "1.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz", + "size": null, + "sha1": "91b4792588a7738c25f35dd6f63752a2f8776135", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/abbrev", + "repository_download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/abbrev/1.0.9", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/abbrev@1.0.9" + }, + "dependency_uid": "pkg:npm/abbrev@1.0.9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/yarn.lock", + "datasource_id": "yarn_lock_v1" + }, + { + "purl": "pkg:npm/xdg-basedir@2.0.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xdg-basedir", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "size": null, + "sha1": "edbc903cc385fc04523d966a335504b5504d1bd2", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/os-homedir", + "extracted_requirement": "^1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/xdg-basedir", + "repository_download_url": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/xdg-basedir/2.0.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/xdg-basedir@2.0.0" + }, + "dependency_uid": "pkg:npm/xdg-basedir@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/yarn.lock", + "datasource_id": "yarn_lock_v1" + }, + { + "purl": "pkg:npm/xtend@4.0.1", + "extracted_requirement": "^4.0.0 ~4.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xtend", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz", + "size": null, + "sha1": "a5c6d532be656e23db820efb943a1f04998d63af", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xtend", + "repository_download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/xtend/4.0.1", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/xtend@4.0.1" + }, + "dependency_uid": "pkg:npm/xtend@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/yarn.lock", + "datasource_id": "yarn_lock_v1" + }, + { + "purl": "pkg:npm/yallist@2.0.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yallist", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz", + "size": null, + "sha1": "306c543835f09ee1a4cb23b7bce9ab341c91cdd4", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yallist", + "repository_download_url": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/yallist/2.0.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/yallist@2.0.0" + }, + "dependency_uid": "pkg:npm/yallist@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/node_modules/sequelize/yarn.lock", + "datasource_id": "yarn_lock_v1" + } + ], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "lodash.clonedeep", + "version": "4.3.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "The lodash method `_.cloneDeep` exported as a module.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "type": "person", + "role": "contributor", + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine.bublitz@gmail.com", + "url": "https://github.com/phated" + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "https://mathiasbynens.be/" + } + ], + "keywords": [ + "lodash-modularized", + "clonedeep" + ], + "homepage_url": "https://lodash.com/", + "download_url": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/lodash/lodash", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://www.npmjs.com/package/lodash.clonedeep", + "repository_download_url": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz", + "api_data_url": "https://registry.npmjs.org/lodash.clonedeep/4.3.2", + "package_uid": "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/lodash.clonedeep@4.3.2" + }, + { + "type": "npm", + "namespace": null, + "name": "sequelize", + "version": "3.30.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "Multi dialect ORM for Node.JS/io.js", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Sascha Depold", + "email": "sascha@depold.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sascha Depold", + "email": "sascha@depold.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Aagaard Meier", + "email": "janzeh@gmail.com\njmei@itu.dk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Durante", + "email": "me@danieldurante.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Hansen", + "email": "mick.kasper.hansen@gmail.com", + "url": null + } + ], + "keywords": [ + "mysql", + "nodejs", + "object relational mapper" + ], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/sequelize/sequelize/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/sequelize/sequelize.git", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://www.npmjs.com/package/sequelize", + "repository_download_url": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.2.tgz", + "api_data_url": "https://registry.npmjs.org/sequelize/3.30.2", + "package_uid": "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/node_modules/sequelize/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/sequelize@3.30.2" + } + ], + "files": [ + { + "path": "scan", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/node_modules", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/node_modules/sequelize", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/node_modules/sequelize/package-lock.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": "", + "name": "babel-runtime", + "version": "6.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "lockfile_version": 1 + }, + "dependencies": [ + { + "purl": "pkg:npm/ansi-regex@2.1.1", + "extracted_requirement": "2.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-regex", + "version": "2.1.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "size": null, + "sha1": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ansi-regex", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-regex", + "repository_download_url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-regex/2.1.1", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ansi-regex@2.1.1" + } + }, + { + "purl": "pkg:npm/to-fast-properties@1.0.3", + "extracted_requirement": "1.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-fast-properties", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "size": null, + "sha1": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-fast-properties", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", + "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/to-fast-properties@1.0.3" + } + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-runtime/6.23.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-runtime@6.23.0" + } + ], + "for_packages": [ + "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/node_modules/sequelize/package.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "sequelize", + "version": "3.30.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "Multi dialect ORM for Node.JS/io.js", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Sascha Depold", + "email": "sascha@depold.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sascha Depold", + "email": "sascha@depold.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Aagaard Meier", + "email": "janzeh@gmail.com\njmei@itu.dk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Durante", + "email": "me@danieldurante.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Hansen", + "email": "mick.kasper.hansen@gmail.com", + "url": null + } + ], + "keywords": [ + "mysql", + "nodejs", + "object relational mapper" + ], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/sequelize/sequelize/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/sequelize/sequelize.git", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/bluebird", + "extracted_requirement": "^3.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/wkx", + "extracted_requirement": "0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chai", + "extracted_requirement": "^3.5.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chai-as-promised", + "extracted_requirement": "^5.1.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/watchr", + "extracted_requirement": "~2.4.11", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/sequelize", + "repository_download_url": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.2.tgz", + "api_data_url": "https://registry.npmjs.org/sequelize/3.30.2", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/sequelize@3.30.2" + } + ], + "for_packages": [ + "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/node_modules/sequelize/yarn.lock", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/abbrev@1.0.9", + "extracted_requirement": "1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "abbrev", + "version": "1.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz", + "size": null, + "sha1": "91b4792588a7738c25f35dd6f63752a2f8776135", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/abbrev", + "repository_download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/abbrev/1.0.9", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/abbrev@1.0.9" + } + }, + { + "purl": "pkg:npm/xdg-basedir@2.0.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xdg-basedir", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "size": null, + "sha1": "edbc903cc385fc04523d966a335504b5504d1bd2", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/os-homedir", + "extracted_requirement": "^1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/xdg-basedir", + "repository_download_url": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/xdg-basedir/2.0.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/xdg-basedir@2.0.0" + } + }, + { + "purl": "pkg:npm/xtend@4.0.1", + "extracted_requirement": "^4.0.0 ~4.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "xtend", + "version": "4.0.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz", + "size": null, + "sha1": "a5c6d532be656e23db820efb943a1f04998d63af", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/xtend", + "repository_download_url": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/xtend/4.0.1", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/xtend@4.0.1" + } + }, + { + "purl": "pkg:npm/yallist@2.0.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "yallist", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz", + "size": null, + "sha1": "306c543835f09ee1a4cb23b7bce9ab341c91cdd4", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/yallist", + "repository_download_url": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/yallist/2.0.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/yallist@2.0.0" + } + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "yarn_lock_v1", + "purl": null + } + ], + "for_packages": [ + "pkg:npm/sequelize@3.30.2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/package-lock.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": "", + "name": "babel-runtime", + "version": "6.23.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": { + "lockfile_version": 1 + }, + "dependencies": [ + { + "purl": "pkg:npm/ms@2.0.0", + "extracted_requirement": "2.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ms", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "size": null, + "sha1": "5608aeadfc00be6c2901df5f9861788de0d597c8", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "ms", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/ms", + "repository_download_url": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/ms/2.0.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/ms@2.0.0" + } + }, + { + "purl": "pkg:npm/regenerator-runtime@0.11.0", + "extracted_requirement": "0.11.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "regenerator-runtime", + "version": "0.11.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": "fda03490b7916f937d2b47787f0ee8a046c8fb10def83283e3df4442aca01aa792f0ddf1b68d79a74f6e636c63ee2c4ff35b0d3d7bd12e701022a7554ad81bd4", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "regenerator-runtime", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/regenerator-runtime", + "repository_download_url": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "api_data_url": "https://registry.npmjs.org/regenerator-runtime/0.11.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/regenerator-runtime@0.11.0" + } + }, + { + "purl": "pkg:npm/to-fast-properties@1.0.3", + "extracted_requirement": "1.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "to-fast-properties", + "version": "1.0.3", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "size": null, + "sha1": "b83571fa4d8c25b82e231b06e3a3055de4ca1a47", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [ + [ + { + "path": "to-fast-properties", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/to-fast-properties", + "repository_download_url": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/to-fast-properties/1.0.3", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/to-fast-properties@1.0.3" + } + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-runtime", + "repository_download_url": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-runtime/6.23.0", + "datasource_id": "npm_package_lock_json", + "purl": "pkg:npm/babel-runtime@6.23.0" + } + ], + "for_packages": [ + "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/package.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "lodash.clonedeep", + "version": "4.3.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "The lodash method `_.cloneDeep` exported as a module.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "type": "person", + "role": "contributor", + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine.bublitz@gmail.com", + "url": "https://github.com/phated" + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "https://mathiasbynens.be/" + } + ], + "keywords": [ + "lodash-modularized", + "clonedeep" + ], + "homepage_url": "https://lodash.com/", + "download_url": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": "https://github.com/lodash/lodash", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/lodash._baseclone", + "extracted_requirement": "~4.5.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/lodash.clonedeep", + "repository_download_url": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz", + "api_data_url": "https://registry.npmjs.org/lodash.clonedeep/4.3.2", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/lodash.clonedeep@4.3.2" + } + ], + "for_packages": [ + "pkg:npm/lodash.clonedeep@4.3.2?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package-lock.json b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package-lock.json new file mode 100644 index 00000000000..9085692db8b --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package-lock.json @@ -0,0 +1,20 @@ +{ + "name": "babel-runtime", + "version": "6.23.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } +} diff --git a/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package.json b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package.json new file mode 100644 index 00000000000..14e5ae7c8a7 --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/package.json @@ -0,0 +1,60 @@ +{ + "name": "sequelize", + "description": "Multi dialect ORM for Node.JS/io.js", + "version": "3.30.2", + "author": "Sascha Depold ", + "contributors": [ + { + "name": "Sascha Depold", + "email": "sascha@depold.com" + }, + { + "name": "Jan Aagaard Meier", + "email": [ + "janzeh@gmail.com", + "jmei@itu.dk" + ] + }, + { + "name": "Daniel Durante", + "email": "me@danieldurante.com" + }, + { + "name": "Mick Hansen", + "email": "mick.kasper.hansen@gmail.com" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/sequelize/sequelize.git" + }, + "bugs": { + "url": "https://github.com/sequelize/sequelize/issues" + }, + "dependencies": { + "bluebird": "^3.3.4", + "wkx": "0.2.0" + }, + "devDependencies": { + "chai": "^3.5.0", + "chai-as-promised": "^5.1.0", + "watchr": "~2.4.11" + }, + "keywords": [ + "mysql", + "nodejs", + "object relational mapper" + ], + "main": "index", + "scripts": { + "test": "npm run jshint && npm run teaser && npm run test-unit && npm run test-integration", + "test-docker": "docker-compose run sequelize /bin/sh -c \"npm run test-all\"", + "test-docker-unit": "docker-compose run sequelize /bin/sh -c \"npm run test-unit-all\"", + "sscce-postgres": "cross-env DIALECT=postgres npm run sscce", + "sscce-sqlite": "cross-env DIALECT=sqlite npm run sscce" + }, + "engines": { + "node": ">=0.6.21" + }, + "license": "MIT" +} diff --git a/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/yarn.lock b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/yarn.lock new file mode 100644 index 00000000000..c2b9f543578 --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan/node_modules/sequelize/yarn.lock @@ -0,0 +1,21 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +xdg-basedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" + dependencies: + os-homedir "^1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yallist@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" diff --git a/tests/packagedcode/data/npm/scan-nested/scan/package-lock.json b/tests/packagedcode/data/npm/scan-nested/scan/package-lock.json new file mode 100644 index 00000000000..0f1d2242175 --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan/package-lock.json @@ -0,0 +1,25 @@ +{ + "name": "babel-runtime", + "version": "6.23.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } +} diff --git a/tests/packagedcode/data/npm/scan-nested/scan/package.json b/tests/packagedcode/data/npm/scan-nested/scan/package.json new file mode 100644 index 00000000000..7e93cafa937 --- /dev/null +++ b/tests/packagedcode/data/npm/scan-nested/scan/package.json @@ -0,0 +1,20 @@ +{ + "name": "lodash.clonedeep", + "version": "4.3.2", + "description": "The lodash method `_.cloneDeep` exported as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "keywords": "lodash-modularized, clonedeep", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (https://github.com/phated)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" }, + "dependencies": { + "lodash._baseclone": "~4.5.0" + } +} diff --git a/tests/packagedcode/data/npm/scoped1/package.json.expected b/tests/packagedcode/data/npm/scoped1/package.json.expected index a14b9549d76..3c23e5e0c1c 100644 --- a/tests/packagedcode/data/npm/scoped1/package.json.expected +++ b/tests/packagedcode/data/npm/scoped1/package.json.expected @@ -35,8 +35,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -589,9 +589,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", - "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts" + "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/scoped2/package.json.expected b/tests/packagedcode/data/npm/scoped2/package.json.expected index 8346e6bb082..4752b49d1f7 100644 --- a/tests/packagedcode/data/npm/scoped2/package.json.expected +++ b/tests/packagedcode/data/npm/scoped2/package.json.expected @@ -35,8 +35,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -148,9 +148,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/%40invisionag/eslint-config-ivx@0.0.2", "repository_homepage_url": "https://www.npmjs.com/package/@invisionag/eslint-config-ivx", "repository_download_url": "https://registry.npmjs.org/@invisionag/eslint-config-ivx/-/eslint-config-ivx-0.0.2.tgz", - "api_data_url": "https://registry.npmjs.org/@invisionag%2feslint-config-ivx" + "api_data_url": "https://registry.npmjs.org/@invisionag%2feslint-config-ivx", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/%40invisionag/eslint-config-ivx@0.0.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/sequelize/package.json.expected b/tests/packagedcode/data/npm/sequelize/package.json.expected index e65a37549bd..ee79728c6c0 100644 --- a/tests/packagedcode/data/npm/sequelize/package.json.expected +++ b/tests/packagedcode/data/npm/sequelize/package.json.expected @@ -72,8 +72,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -455,9 +455,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/sequelize@3.30.2", "repository_homepage_url": "https://www.npmjs.com/package/sequelize", "repository_download_url": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.2.tgz", - "api_data_url": "https://registry.npmjs.org/sequelize/3.30.2" + "api_data_url": "https://registry.npmjs.org/sequelize/3.30.2", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/sequelize@3.30.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/uri_vcs/package.json.expected b/tests/packagedcode/data/npm/uri_vcs/package.json.expected index 8f1890787fe..50344b99cbf 100644 --- a/tests/packagedcode/data/npm/uri_vcs/package.json.expected +++ b/tests/packagedcode/data/npm/uri_vcs/package.json.expected @@ -38,8 +38,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -106,9 +106,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm2aur@0.1.3", "repository_homepage_url": "https://www.npmjs.com/package/npm2aur", "repository_download_url": "https://registry.npmjs.org/npm2aur/-/npm2aur-0.1.3.tgz", - "api_data_url": "https://registry.npmjs.org/npm2aur/0.1.3" + "api_data_url": "https://registry.npmjs.org/npm2aur/0.1.3", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm2aur@0.1.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/urls_dict/package.json.expected b/tests/packagedcode/data/npm/urls_dict/package.json.expected index a308bd41fce..194b5e8adc8 100644 --- a/tests/packagedcode/data/npm/urls_dict/package.json.expected +++ b/tests/packagedcode/data/npm/urls_dict/package.json.expected @@ -43,8 +43,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/jsonp-filter@0.0.3", "repository_homepage_url": "https://www.npmjs.com/package/jsonp-filter", "repository_download_url": "https://registry.npmjs.org/jsonp-filter/-/jsonp-filter-0.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/jsonp-filter/0.0.3" + "api_data_url": "https://registry.npmjs.org/jsonp-filter/0.0.3", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/jsonp-filter@0.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/utils-merge-1.0.0/package.json.expected b/tests/packagedcode/data/npm/utils-merge-1.0.0/package.json.expected index df4d3dabb24..b13b1714f71 100644 --- a/tests/packagedcode/data/npm/utils-merge-1.0.0/package.json.expected +++ b/tests/packagedcode/data/npm/utils-merge-1.0.0/package.json.expected @@ -40,8 +40,8 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -63,9 +63,10 @@ "resolved_package": {} } ], - "purl": "pkg:npm/utils-merge@1.0.0", "repository_homepage_url": "https://www.npmjs.com/package/utils-merge", "repository_download_url": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "api_data_url": "https://registry.npmjs.org/utils-merge/1.0.0" + "api_data_url": "https://registry.npmjs.org/utils-merge/1.0.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/utils-merge@1.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/with_name/package.json.expected b/tests/packagedcode/data/npm/with_name/package.json.expected index ee97c1b3fe1..7fccf7fe3f5 100644 --- a/tests/packagedcode/data/npm/with_name/package.json.expected +++ b/tests/packagedcode/data/npm/with_name/package.json.expected @@ -30,13 +30,14 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/bson", "repository_homepage_url": "https://www.npmjs.com/package/bson", "repository_download_url": "https://registry.npmjs.org/bson/-/bson-None.tgz", - "api_data_url": "https://registry.npmjs.org/bson" + "api_data_url": "https://registry.npmjs.org/bson", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/bson" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock b/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock new file mode 100644 index 00000000000..ba267ae31a3 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock @@ -0,0 +1,27 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0", "@babel/core@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/types" "^7.3.4" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" diff --git a/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock-expected b/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock-expected new file mode 100644 index 00000000000..fab585ee1e2 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v1-complex/yarn.lock-expected @@ -0,0 +1,228 @@ +[ + { + "type": "npm", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%40babel/code-frame@7.0.0", + "extracted_requirement": "^7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "@babel", + "name": "code-frame", + "version": "7.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz", + "size": null, + "sha1": "06e2ab19bdb535385559aabb5ba59729482800f8", + "md5": null, + "sha256": null, + "sha512": "39f0b6b9e99a9275ebf3b6dd2d4916a20ee762e96233d223e4751c6a3b1570c0a942b70b9adc516d515322a99c4a449e611045051c6cd85894a852432dd89e6c", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%22%40babel/highlight%22", + "extracted_requirement": "^7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/@babel/code-frame", + "repository_download_url": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/@babel%2fcode-frame", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/%40babel/code-frame@7.0.0" + } + }, + { + "purl": "pkg:npm/%40babel/core@7.3.4", + "extracted_requirement": "^7.1.0 ^7.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "@babel", + "name": "core", + "version": "7.3.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz", + "size": null, + "sha1": "921a5a13746c21e32445bf0798680e9d11a6530b", + "md5": null, + "sha256": null, + "sha512": "8d1b2eb1e5c1a3da4dd7deca9c3c2185a681cf266bda821c2c71d3b76a03750ade8f9429e7b74208969f5b1e62bd4f3f6a51180e9b2c62abf5314a9cc70425ac", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%22%40babel/code-frame%22", + "extracted_requirement": "^7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%22%40babel/generator%22", + "extracted_requirement": "^7.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%22%40babel/types%22", + "extracted_requirement": "^7.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/source-map", + "extracted_requirement": "^0.5.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/@babel/core", + "repository_download_url": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", + "api_data_url": "https://registry.npmjs.org/@babel%2fcore", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/%40babel/core@7.3.4" + } + }, + { + "purl": "pkg:npm/%40babel/helper-annotate-as-pure@7.0.0", + "extracted_requirement": "^7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "@babel", + "name": "helper-annotate-as-pure", + "version": "7.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "size": null, + "sha1": "323d39dd0b50e10c7c06ca7d7638e6864d8c5c32", + "md5": null, + "sha256": null, + "sha512": "dd461c2548fd92f48b6cb6d421f413ab3732e555fb19167f0820eb9ce699a2b145334d5a5e9d7e189c2e1465783430e8012fa6394c8770ee940ff45fa8e92cdd", + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%22%40babel/types%22", + "extracted_requirement": "^7.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/@babel/helper-annotate-as-pure", + "repository_download_url": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/@babel%2fhelper-annotate-as-pure", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/%40babel/helper-annotate-as-pure@7.0.0" + } + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "yarn_lock_v1", + "purl": null + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock b/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock new file mode 100644 index 00000000000..126bb05205c --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock @@ -0,0 +1,50 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +ansi-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" + dependencies: + string-width "^1.0.1" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" + dependencies: + babel-helper-get-function-arity "^6.18.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" diff --git a/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock-expected b/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock-expected new file mode 100644 index 00000000000..483d6746a02 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v1/yarn.lock-expected @@ -0,0 +1,478 @@ +[ + { + "type": "npm", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/abbrev@1.0.9", + "extracted_requirement": "1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "abbrev", + "version": "1.0.9", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz", + "size": null, + "sha1": "91b4792588a7738c25f35dd6f63752a2f8776135", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/abbrev", + "repository_download_url": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "api_data_url": "https://registry.npmjs.org/abbrev/1.0.9", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/abbrev@1.0.9" + } + }, + { + "purl": "pkg:npm/ansi-align@1.1.0", + "extracted_requirement": "^1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "ansi-align", + "version": "1.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz", + "size": null, + "sha1": "2f0c1658829739add5ebb15e6b0c6e3423f016ba", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/string-width", + "extracted_requirement": "^1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/ansi-align", + "repository_download_url": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/ansi-align/1.1.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/ansi-align@1.1.0" + } + }, + { + "purl": "pkg:npm/are-we-there-yet@1.1.2", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "are-we-there-yet", + "version": "1.1.2", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", + "size": null, + "sha1": "80e470e95a084794fe1899262c5667c6e88de1b3", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/delegates", + "extracted_requirement": "^1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "^2.0.0 || ^1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/are-we-there-yet", + "repository_download_url": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", + "api_data_url": "https://registry.npmjs.org/are-we-there-yet/1.1.2", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/are-we-there-yet@1.1.2" + } + }, + { + "purl": "pkg:npm/arr-diff@2.0.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "arr-diff", + "version": "2.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz", + "size": null, + "sha1": "8f3b827f955a8bd669697e4a4256ac3ceae356cf", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/arr-flatten", + "extracted_requirement": "^1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/arr-diff", + "repository_download_url": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/arr-diff/2.0.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/arr-diff@2.0.0" + } + }, + { + "purl": "pkg:npm/babel-helper-function-name@6.18.0", + "extracted_requirement": "^6.18.0 ^6.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "babel-helper-function-name", + "version": "6.18.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz", + "size": null, + "sha1": "68ec71aeba1f3e28b2a6f0730190b754a9bf30e6", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/babel-helper-get-function-arity", + "extracted_requirement": "^6.18.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babel-traverse", + "extracted_requirement": "^6.18.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/babel-types", + "extracted_requirement": "^6.18.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/babel-helper-function-name", + "repository_download_url": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz", + "api_data_url": "https://registry.npmjs.org/babel-helper-function-name/6.18.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/babel-helper-function-name@6.18.0" + } + }, + { + "purl": "pkg:npm/rimraf@2.5.4", + "extracted_requirement": "2 ~2.5.1 ~2.5.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "rimraf", + "version": "2.5.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz", + "size": null, + "sha1": "96800093cbf1a0c86bd95b4625467535c29dfa04", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/glob", + "extracted_requirement": "^7.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/rimraf", + "repository_download_url": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "api_data_url": "https://registry.npmjs.org/rimraf/2.5.4", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/rimraf@2.5.4" + } + }, + { + "purl": "pkg:npm/semver-diff@2.1.0", + "extracted_requirement": "^2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "semver-diff", + "version": "2.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz", + "size": null, + "sha1": "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/semver", + "extracted_requirement": "^5.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/semver-diff", + "repository_download_url": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/semver-diff/2.1.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/semver-diff@2.1.0" + } + }, + { + "purl": "pkg:npm/semver@5.3.0", + "extracted_requirement": "2 || 3 || 4 || 5 ^5.0.3 ^5.1.0 ^5.3.0 ~5.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": { + "type": "npm", + "namespace": "", + "name": "semver", + "version": "5.3.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz", + "size": null, + "sha1": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/semver", + "repository_download_url": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "api_data_url": "https://registry.npmjs.org/semver/5.3.0", + "datasource_id": "yarn_lock_v1", + "purl": "pkg:npm/semver@5.3.0" + } + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "yarn_lock_v1", + "purl": null + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock b/tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock new file mode 100644 index 00000000000..158c64b5452 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock @@ -0,0 +1,11 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 5 + +"bookmarkmap@workspace:.": + version: 0.0.0-use.local + resolution: "bookmarkmap@workspace:." + languageName: unknown + linkType: soft diff --git a/tests/packagedcode/data/npm/yarn-lock/yarn.lock-expected b/tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock-expected similarity index 98% rename from tests/packagedcode/data/npm/yarn-lock/yarn.lock-expected rename to tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock-expected index 2cc54fbf804..8f4a057da55 100644 --- a/tests/packagedcode/data/npm/yarn-lock/yarn.lock-expected +++ b/tests/packagedcode/data/npm/yarn-lock/v2-local/yarn.lock-expected @@ -25,7 +25,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4210,7 +4209,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4245,7 +4243,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4290,7 +4287,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4325,7 +4321,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4360,7 +4355,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4395,7 +4389,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4449,7 +4442,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4484,7 +4476,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4529,7 +4520,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4574,7 +4564,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4609,7 +4598,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4644,7 +4632,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4679,7 +4666,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4714,7 +4700,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -4759,7 +4744,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4794,7 +4778,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4829,7 +4812,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4864,7 +4846,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4899,7 +4880,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4934,7 +4914,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -4969,7 +4948,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -5004,7 +4982,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -5039,7 +5016,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -5074,7 +5050,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -5173,7 +5148,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -5263,7 +5237,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -5974,7 +5947,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -6009,7 +5981,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -6044,7 +6015,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6107,7 +6077,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6314,7 +6283,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6413,7 +6381,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6476,7 +6443,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6539,7 +6505,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6611,7 +6576,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6683,7 +6647,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6746,7 +6709,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6818,7 +6780,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6899,7 +6860,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -6953,7 +6913,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7007,7 +6966,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7061,7 +7019,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7124,7 +7081,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7205,7 +7161,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7295,7 +7250,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7349,7 +7303,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7394,7 +7347,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7448,7 +7400,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7493,7 +7444,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7528,7 +7478,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7627,7 +7576,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7662,7 +7610,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7697,7 +7644,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7732,7 +7678,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7767,7 +7712,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7802,7 +7746,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7837,7 +7780,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7872,7 +7814,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -7907,7 +7848,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -7970,7 +7910,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8033,7 +7972,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8105,7 +8043,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8195,7 +8132,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8240,7 +8176,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8285,7 +8220,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8366,7 +8300,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8483,7 +8416,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8546,7 +8478,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8591,7 +8522,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8645,7 +8575,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8690,7 +8619,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8753,7 +8681,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8798,7 +8725,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8861,7 +8787,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8933,7 +8858,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -8996,7 +8920,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9059,7 +8982,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9113,7 +9035,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9203,7 +9124,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9257,7 +9177,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9302,7 +9221,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9365,7 +9283,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9410,7 +9327,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9455,7 +9371,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9518,7 +9433,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9581,7 +9495,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9635,7 +9548,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9680,7 +9592,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9725,7 +9636,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9779,7 +9689,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -9887,7 +9796,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10139,7 +10047,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10211,7 +10118,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10292,7 +10198,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10391,7 +10296,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10445,7 +10349,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10526,7 +10429,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10643,7 +10545,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10715,7 +10616,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -10750,7 +10650,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -10785,7 +10684,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10830,7 +10728,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -10865,7 +10762,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10910,7 +10806,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -10945,7 +10840,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -10990,7 +10884,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11107,7 +11000,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11161,7 +11053,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11224,7 +11115,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11259,7 +11149,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11294,7 +11183,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11329,7 +11217,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11364,7 +11251,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11427,7 +11313,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11499,7 +11384,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11534,7 +11418,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11588,7 +11471,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11623,7 +11505,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11658,7 +11539,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11693,7 +11573,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -11728,7 +11607,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11791,7 +11669,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11872,7 +11749,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -11989,7 +11865,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12024,7 +11899,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12059,7 +11933,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12094,7 +11967,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12139,7 +12011,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12174,7 +12045,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12228,7 +12098,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12273,7 +12142,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12308,7 +12176,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12353,7 +12220,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12388,7 +12254,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12423,7 +12288,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12458,7 +12322,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12493,7 +12356,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12610,7 +12472,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12645,7 +12506,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12680,7 +12540,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12734,7 +12593,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12769,7 +12627,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -12804,7 +12661,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12849,7 +12705,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12903,7 +12758,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12948,7 +12802,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -12993,7 +12846,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13038,7 +12890,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13073,7 +12924,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13118,7 +12968,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13153,7 +13002,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13188,7 +13036,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13223,7 +13070,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13258,7 +13104,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13293,7 +13138,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13338,7 +13182,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13373,7 +13216,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13418,7 +13260,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13463,7 +13304,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13498,7 +13338,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13543,7 +13382,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13597,7 +13435,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13642,7 +13479,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13677,7 +13513,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13749,7 +13584,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13794,7 +13628,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13829,7 +13662,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13864,7 +13696,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -13899,7 +13730,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13944,7 +13774,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -13989,7 +13818,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14024,7 +13852,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14069,7 +13896,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14104,7 +13930,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14158,7 +13983,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14193,7 +14017,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14274,7 +14097,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14309,7 +14131,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14372,7 +14193,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14426,7 +14246,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14471,7 +14290,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14506,7 +14324,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14541,7 +14358,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14586,7 +14402,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14621,7 +14436,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14684,7 +14498,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -14719,7 +14532,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14773,7 +14585,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14836,7 +14647,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -14899,7 +14709,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15016,7 +14825,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15051,7 +14859,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15096,7 +14903,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15131,7 +14937,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15176,7 +14981,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15211,7 +15015,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15256,7 +15059,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15310,7 +15112,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15355,7 +15156,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15445,7 +15245,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15480,7 +15279,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15561,7 +15359,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15732,7 +15529,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15767,7 +15563,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15802,7 +15597,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15837,7 +15631,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15909,7 +15702,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -15954,7 +15746,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -15989,7 +15780,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16024,7 +15814,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16059,7 +15848,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16094,7 +15882,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16139,7 +15926,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16211,7 +15997,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16246,7 +16031,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16300,7 +16084,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16335,7 +16118,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16398,7 +16180,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16433,7 +16214,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16468,7 +16248,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16513,7 +16292,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16567,7 +16345,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16602,7 +16379,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16637,7 +16413,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16682,7 +16457,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16717,7 +16491,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16752,7 +16525,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16797,7 +16569,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16832,7 +16603,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16877,7 +16647,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -16922,7 +16691,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -16957,7 +16725,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17002,7 +16769,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17037,7 +16803,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17072,7 +16837,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17107,7 +16871,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17152,7 +16915,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17197,7 +16959,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17232,7 +16993,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17277,7 +17037,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17349,7 +17108,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17384,7 +17142,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17429,7 +17186,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17464,7 +17220,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -17509,7 +17264,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17544,7 +17298,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17579,7 +17332,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17614,7 +17366,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17649,7 +17400,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17684,7 +17434,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17719,7 +17468,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17754,7 +17502,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17789,7 +17536,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17824,7 +17570,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17859,7 +17604,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17894,7 +17638,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17929,7 +17672,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -17964,7 +17706,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18009,7 +17750,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18044,7 +17784,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18089,7 +17828,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18124,7 +17862,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18159,7 +17896,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18194,7 +17930,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18229,7 +17964,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18264,7 +17998,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18299,7 +18032,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18334,7 +18066,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18369,7 +18100,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18404,7 +18134,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18439,7 +18168,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18502,7 +18230,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18547,7 +18274,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18592,7 +18318,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18637,7 +18362,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18672,7 +18396,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18753,7 +18476,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -18807,7 +18529,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18842,7 +18563,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18877,7 +18597,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18912,7 +18631,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -18947,7 +18665,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19010,7 +18727,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19045,7 +18761,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19080,7 +18795,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19115,7 +18829,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19150,7 +18863,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19185,7 +18897,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19220,7 +18931,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19283,7 +18993,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19318,7 +19027,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19363,7 +19071,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19417,7 +19124,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19452,7 +19158,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19506,7 +19211,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19541,7 +19245,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19586,7 +19289,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19621,7 +19323,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19666,7 +19367,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -19701,7 +19401,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19827,7 +19526,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -19980,7 +19678,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20015,7 +19712,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20060,7 +19756,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20105,7 +19800,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20140,7 +19834,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20175,7 +19868,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20220,7 +19912,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20355,7 +20046,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20390,7 +20080,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20462,7 +20151,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20497,7 +20185,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20614,7 +20301,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20649,7 +20335,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20694,7 +20379,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20757,7 +20441,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20792,7 +20475,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -20864,7 +20546,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20899,7 +20580,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20934,7 +20614,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -20969,7 +20648,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21023,7 +20701,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21077,7 +20754,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21122,7 +20798,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21167,7 +20842,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21202,7 +20876,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21247,7 +20920,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21282,7 +20954,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21317,7 +20988,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21371,7 +21041,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21416,7 +21085,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21488,7 +21156,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21560,7 +21227,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21605,7 +21271,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21640,7 +21305,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21675,7 +21339,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21720,7 +21383,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21755,7 +21417,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21818,7 +21479,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21853,7 +21513,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21898,7 +21557,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -21943,7 +21601,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -21978,7 +21635,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22013,7 +21669,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22085,7 +21740,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22130,7 +21784,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22165,7 +21818,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22210,7 +21862,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22264,7 +21915,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22318,7 +21968,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22372,7 +22021,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22407,7 +22055,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22479,7 +22126,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22533,7 +22179,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22578,7 +22223,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22613,7 +22257,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22648,7 +22291,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22693,7 +22335,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22756,7 +22397,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22791,7 +22431,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22826,7 +22465,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22861,7 +22499,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22896,7 +22533,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -22931,7 +22567,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -22985,7 +22620,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23057,7 +22691,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23111,7 +22744,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23165,7 +22797,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23228,7 +22859,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23327,7 +22957,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23426,7 +23055,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23498,7 +23126,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23552,7 +23179,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -23587,7 +23213,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -23622,7 +23247,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23685,7 +23309,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23739,7 +23362,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23802,7 +23424,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23847,7 +23468,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23892,7 +23512,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -23927,7 +23546,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -23972,7 +23590,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24007,7 +23624,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24042,7 +23658,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24087,7 +23702,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24303,7 +23917,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24338,7 +23951,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24383,7 +23995,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24418,7 +24029,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24472,7 +24082,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24517,7 +24126,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24562,7 +24170,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24597,7 +24204,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24632,7 +24238,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24667,7 +24272,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24702,7 +24306,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24737,7 +24340,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24772,7 +24374,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24807,7 +24408,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -24842,7 +24442,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24887,7 +24486,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24932,7 +24530,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -24977,7 +24574,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25012,7 +24608,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25057,7 +24652,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25092,7 +24686,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25127,7 +24720,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25244,7 +24836,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25279,7 +24870,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25342,7 +24932,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25377,7 +24966,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25440,7 +25028,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25475,7 +25062,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25520,7 +25106,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25555,7 +25140,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25600,7 +25184,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25645,7 +25228,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25680,7 +25262,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25725,7 +25306,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25760,7 +25340,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25795,7 +25374,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25830,7 +25408,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -25865,7 +25442,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -25973,7 +25549,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26036,7 +25611,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26071,7 +25645,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26106,7 +25679,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26160,7 +25732,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26232,7 +25803,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26267,7 +25837,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26302,7 +25871,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26347,7 +25915,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26382,7 +25949,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26417,7 +25983,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26452,7 +26017,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26487,7 +26051,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26522,7 +26085,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26557,7 +26119,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26592,7 +26153,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26627,7 +26187,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26690,7 +26249,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26725,7 +26283,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26833,7 +26390,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26878,7 +26434,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -26923,7 +26478,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26958,7 +26512,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -26993,7 +26546,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -27028,7 +26580,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -27063,7 +26614,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -27098,7 +26648,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27152,7 +26701,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27197,7 +26745,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27242,7 +26789,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27287,7 +26833,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27332,7 +26877,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -27367,7 +26911,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27430,7 +26973,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27529,7 +27071,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27574,7 +27115,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [ @@ -27619,7 +27159,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], @@ -27654,7 +27193,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, "dependencies": [], diff --git a/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock b/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock new file mode 100644 index 00000000000..fd27635e964 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock @@ -0,0 +1,31 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 9 + +"@actions/core@npm:^1.2.6": + version: 1.2.6 + resolution: "@actions/core@npm:1.2.6" + checksum: 034e57fcb5f944d5fb0ef55be1b212dd88e23d1a50aaffda874cb94e8f4bfa633a66f108f26e81a7cce287cd2b349aa88c97d2023135c8879495326db37a7feb + languageName: node + linkType: hard + +"@babel/cli@npm:^7.10.1": + version: 7.10.1 + resolution: "@babel/cli@npm:7.10.1" + dependencies: + chokidar: ^2.1.8 + source-map: ^0.5.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + dependenciesMeta: + chokidar: + optional: true + bin: + babel: ./bin/babel.js + babel-external-helpers: ./bin/babel-external-helpers.js + checksum: a2f9d52e2f866c4c6e5c4fdb4e64820ebbc6acb2aeaeac3e4d97cee16054684f015f253a6f036a2065729a520e595da085cf476501d3bc279d50ffc0dc891641 + languageName: node + linkType: hard diff --git a/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock-expected b/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock-expected new file mode 100644 index 00000000000..dce77ac3902 --- /dev/null +++ b/tests/packagedcode/data/npm/yarn-lock/v2/yarn.lock-expected @@ -0,0 +1,57 @@ +[ + { + "type": "npm", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%40actions/core@1.2.6", + "extracted_requirement": "1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40babel/cli@7.10.1", + "extracted_requirement": "7.10.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": true, + "resolved_package": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "yarn_lock_v2", + "purl": null + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/yarn-lock/yarn.lock b/tests/packagedcode/data/npm/yarn-lock/yarn.lock deleted file mode 100644 index a5cdcfe2964..00000000000 --- a/tests/packagedcode/data/npm/yarn-lock/yarn.lock +++ /dev/null @@ -1,2891 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" - dependencies: - string-width "^1.0.1" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" - dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" - -aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" - -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-exclude@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/arr-exclude/-/arr-exclude-1.0.0.tgz#dfc7c2e552a270723ccda04cf3128c8cbfe5c631" - -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1, array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -auto-bind@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-0.1.0.tgz#7a29efc8c2388d3d578e02fc2df531c81ffc1ee1" - -ava-files@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ava-files/-/ava-files-0.2.0.tgz#c7b8b6e2e0cea63b57a6e27e0db145c7c19cfe20" - dependencies: - auto-bind "^0.1.0" - bluebird "^3.4.1" - globby "^6.0.0" - ignore-by-default "^1.0.1" - lodash.flatten "^4.2.0" - multimatch "^2.1.0" - slash "^1.0.0" - -ava-init@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ava-init/-/ava-init-0.1.6.tgz#ef19ed0b24b6bf359dad6fbadf1a05d836395c91" - dependencies: - arr-exclude "^1.0.0" - cross-spawn "^4.0.0" - pinkie-promise "^2.0.0" - read-pkg-up "^1.0.1" - the-argv "^1.0.0" - write-pkg "^1.0.0" - -ava@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/ava/-/ava-0.17.0.tgz#359e2a89616801ef03929c3cf10a9d4f8e451d02" - dependencies: - arr-flatten "^1.0.1" - array-union "^1.0.1" - array-uniq "^1.0.2" - arrify "^1.0.0" - auto-bind "^0.1.0" - ava-files "^0.2.0" - ava-init "^0.1.0" - babel-code-frame "^6.16.0" - babel-core "^6.17.0" - babel-plugin-ava-throws-helper "^0.1.0" - babel-plugin-detective "^2.0.0" - babel-plugin-espower "^2.3.1" - babel-plugin-transform-runtime "^6.15.0" - babel-preset-es2015 "^6.16.0" - babel-preset-es2015-node4 "^2.1.0" - babel-preset-stage-2 "^6.17.0" - babel-runtime "^6.11.6" - bluebird "^3.0.0" - caching-transform "^1.0.0" - chalk "^1.0.0" - chokidar "^1.4.2" - clean-yaml-object "^0.1.0" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - cli-truncate "^0.2.0" - co-with-promise "^4.6.0" - common-path-prefix "^1.0.0" - convert-source-map "^1.2.0" - core-assert "^0.2.0" - currently-unhandled "^0.4.1" - debug "^2.2.0" - empower-core "^0.6.1" - figures "^1.4.0" - find-cache-dir "^0.1.1" - fn-name "^2.0.0" - get-port "^2.1.0" - has-flag "^2.0.0" - ignore-by-default "^1.0.0" - is-ci "^1.0.7" - is-generator-fn "^1.0.0" - is-obj "^1.0.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - last-line-stream "^1.0.0" - lodash.debounce "^4.0.3" - lodash.difference "^4.3.0" - lodash.isequal "^4.4.0" - loud-rejection "^1.2.0" - matcher "^0.1.1" - max-timeout "^1.0.0" - md5-hex "^1.2.0" - meow "^3.7.0" - ms "^0.7.1" - object-assign "^4.0.1" - observable-to-promise "^0.4.0" - option-chain "^0.1.0" - package-hash "^1.1.0" - pkg-conf "^1.0.1" - plur "^2.0.0" - power-assert-context-formatter "^1.0.4" - power-assert-renderer-assertion "^1.0.1" - power-assert-renderer-succinct "^1.0.1" - pretty-ms "^2.0.0" - repeating "^2.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^1.0.0" - semver "^5.3.0" - set-immediate-shim "^1.0.1" - source-map-support "^0.4.0" - stack-utils "^0.4.0" - strip-ansi "^3.0.1" - strip-bom "^2.0.0" - time-require "^0.1.2" - unique-temp-dir "^1.0.0" - update-notifier "^1.0.0" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" - -babel-code-frame@^6.16.0, babel-code-frame@^6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^2.0.0" - -babel-core@^6.17.0, babel-core@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" - dependencies: - babel-code-frame "^6.20.0" - babel-generator "^6.21.0" - babel-helpers "^6.16.0" - babel-messages "^6.8.0" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-generator@^6.1.0, babel-generator@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494" - dependencies: - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - -babel-helper-bindify-decorators@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5" - dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" - dependencies: - babel-helper-explode-assignable-expression "^6.18.0" - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-call-delegate@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" - dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" - dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.9.0" - babel-types "^6.18.0" - lodash "^4.2.0" - -babel-helper-explode-assignable-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" - dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-explode-class@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb" - dependencies: - babel-helper-bindify-decorators "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" - dependencies: - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-get-function-arity@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-hoist-variables@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-optimise-call-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-regex@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" - dependencies: - babel-runtime "^6.9.0" - babel-types "^6.18.0" - lodash "^4.2.0" - -babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: - version "6.20.3" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.20.3.tgz#9dd3b396f13e35ef63e538098500adc24c63c4e7" - dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.20.0" - babel-types "^6.20.0" - -babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" - dependencies: - babel-helper-optimise-call-expression "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helpers@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" - dependencies: - babel-runtime "^6.0.0" - babel-template "^6.16.0" - -babel-messages@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-ava-throws-helper@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-0.1.0.tgz#951107708a12208026bf8ca4cef18a87bc9b0cfe" - dependencies: - babel-template "^6.7.0" - babel-types "^6.7.2" - -babel-plugin-check-es2015-constants@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-detective@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-detective/-/babel-plugin-detective-2.0.0.tgz#6e642e83c22a335279754ebe2d754d2635f49f13" - -babel-plugin-espower@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-2.3.2.tgz#5516b8fcdb26c9f0e1d8160749f6e4c65e71271e" - dependencies: - babel-generator "^6.1.0" - babylon "^6.1.0" - call-matcher "^1.0.0" - core-js "^2.0.0" - espower-location-detector "^1.0.0" - espurify "^1.6.0" - estraverse "^4.1.1" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.3.13: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.20.0.tgz#442835e19179f45b87e92d477d70b9f1f18b5c4f" - -babel-plugin-transform-async-generator-functions@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" - dependencies: - babel-helper-remap-async-to-generator "^6.16.2" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-async-to-generator@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-class-properties@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" - dependencies: - babel-helper-function-name "^6.18.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" - babel-template "^6.15.0" - -babel-plugin-transform-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" - dependencies: - babel-helper-define-map "^6.8.0" - babel-helper-explode-class "^6.8.0" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-types "^6.13.0" - -babel-plugin-transform-es2015-arrow-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-block-scoping@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.21.0.tgz#e840687f922e70fb2c42bb13501838c174a115ed" - dependencies: - babel-runtime "^6.20.0" - babel-template "^6.15.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" - dependencies: - babel-helper-define-map "^6.18.0" - babel-helper-function-name "^6.18.0" - babel-helper-optimise-call-expression "^6.18.0" - babel-helper-replace-supers "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-template "^6.14.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-plugin-transform-es2015-computed-properties@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" - dependencies: - babel-helper-define-map "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - -babel-plugin-transform-es2015-destructuring@^6.18.0, babel-plugin-transform-es2015-destructuring@^6.6.5: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533" - dependencies: - babel-runtime "^6.9.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.8.0" - -babel-plugin-transform-es2015-for-of@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" - dependencies: - babel-helper-function-name "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.9.0" - -babel-plugin-transform-es2015-literals@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-modules-amd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - -babel-plugin-transform-es2015-modules-commonjs@^6.18.0, babel-plugin-transform-es2015-modules-commonjs@^6.7.4: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" - dependencies: - babel-plugin-transform-strict-mode "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-types "^6.18.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6" - dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.11.6" - babel-template "^6.14.0" - -babel-plugin-transform-es2015-modules-umd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - -babel-plugin-transform-es2015-object-super@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" - dependencies: - babel-helper-replace-supers "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-parameters@^6.18.0, babel-plugin-transform-es2015-parameters@^6.7.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.21.0.tgz#46a655e6864ef984091448cdf024d87b60b2a7d8" - dependencies: - babel-helper-call-delegate "^6.18.0" - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.9.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - -babel-plugin-transform-es2015-shorthand-properties@^6.18.0, babel-plugin-transform-es2015-shorthand-properties@^6.5.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-plugin-transform-es2015-spread@^6.3.13, babel-plugin-transform-es2015-spread@^6.6.5: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-sticky-regex@^6.3.13, babel-plugin-transform-es2015-sticky-regex@^6.5.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" - dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" - babel-types "^6.8.0" - -babel-plugin-transform-es2015-template-literals@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-es2015-unicode-regex@^6.3.13, babel-plugin-transform-es2015-unicode-regex@^6.5.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" - dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-object-rest-spread@^6.16.0: - version "6.20.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.20.2.tgz#e816c55bba77b14c16365d87e2ae48c8fd18fc2e" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.20.0" - -babel-plugin-transform-regenerator@^6.16.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.21.0.tgz#75d0c7e7f84f379358f508451c68a2c5fa5a9703" - dependencies: - regenerator-transform "0.9.8" - -babel-plugin-transform-runtime@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" - dependencies: - babel-runtime "^6.9.0" - -babel-plugin-transform-strict-mode@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-preset-es2015-node4@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-node4/-/babel-preset-es2015-node4-2.1.1.tgz#e31f290859b58619c8cfa241d1b0bc900f941cdb" - dependencies: - babel-plugin-transform-es2015-destructuring "^6.6.5" - babel-plugin-transform-es2015-function-name "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.7.4" - babel-plugin-transform-es2015-parameters "^6.7.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.6.5" - babel-plugin-transform-es2015-sticky-regex "^6.5.0" - babel-plugin-transform-es2015-unicode-regex "^6.5.0" - -babel-preset-es2015@^6.16.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" - dependencies: - babel-plugin-check-es2015-constants "^6.3.13" - babel-plugin-transform-es2015-arrow-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoping "^6.18.0" - babel-plugin-transform-es2015-classes "^6.18.0" - babel-plugin-transform-es2015-computed-properties "^6.3.13" - babel-plugin-transform-es2015-destructuring "^6.18.0" - babel-plugin-transform-es2015-duplicate-keys "^6.6.0" - babel-plugin-transform-es2015-for-of "^6.18.0" - babel-plugin-transform-es2015-function-name "^6.9.0" - babel-plugin-transform-es2015-literals "^6.3.13" - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-plugin-transform-es2015-modules-systemjs "^6.18.0" - babel-plugin-transform-es2015-modules-umd "^6.18.0" - babel-plugin-transform-es2015-object-super "^6.3.13" - babel-plugin-transform-es2015-parameters "^6.18.0" - babel-plugin-transform-es2015-shorthand-properties "^6.18.0" - babel-plugin-transform-es2015-spread "^6.3.13" - babel-plugin-transform-es2015-sticky-regex "^6.3.13" - babel-plugin-transform-es2015-template-literals "^6.6.0" - babel-plugin-transform-es2015-typeof-symbol "^6.18.0" - babel-plugin-transform-es2015-unicode-regex "^6.3.13" - babel-plugin-transform-regenerator "^6.16.0" - -babel-preset-stage-2@^6.17.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-decorators "^6.13.0" - babel-preset-stage-3 "^6.17.0" - -babel-preset-stage-3@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.3.13" - babel-plugin-transform-async-generator-functions "^6.17.0" - babel-plugin-transform-async-to-generator "^6.16.0" - babel-plugin-transform-exponentiation-operator "^6.3.13" - babel-plugin-transform-object-rest-spread "^6.16.0" - -babel-register@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" - dependencies: - babel-core "^6.18.0" - babel-runtime "^6.11.6" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.7.0, babel-template@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" - dependencies: - babel-runtime "^6.9.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad" - dependencies: - babel-code-frame "^6.20.0" - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" - babylon "^6.11.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.13.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.7.2, babel-types@^6.8.0, babel-types@^6.9.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2" - dependencies: - babel-runtime "^6.20.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^6.1.0, babylon@^6.11.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.0.0, bluebird@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boxen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" - dependencies: - ansi-align "^1.1.0" - camelcase "^2.1.0" - chalk "^1.1.1" - cli-boxes "^1.0.0" - filled-array "^1.0.0" - object-assign "^4.0.1" - repeating "^2.0.0" - string-width "^1.0.1" - widest-line "^1.0.0" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - -buf-compare@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" - -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -caching-transform@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" - dependencies: - md5-hex "^1.2.0" - mkdirp "^0.5.1" - write-file-atomic "^1.1.4" - -call-matcher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" - dependencies: - core-js "^2.0.0" - deep-equal "^1.0.0" - espurify "^1.6.0" - estraverse "^4.0.0" - -call-signature@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0, camelcase@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -"chainsaw@>=0.0.7 <0.1": - version "0.0.9" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.0.9.tgz#11a05102d1c4c785b6d0415d336d5a3a1612913e" - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chokidar@^1.4.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-truncate@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -co-with-promise@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7" - dependencies: - pinkie-promise "^1.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@2.9.0, commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -common-path-prefix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -configstore@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" - dependencies: - dot-prop "^3.0.0" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - object-assign "^4.0.1" - os-tmpdir "^1.0.0" - osenv "^0.1.0" - uuid "^2.0.1" - write-file-atomic "^1.1.2" - xdg-basedir "^2.0.0" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -convert-source-map@^1.1.0, convert-source-map@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" - -core-assert@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" - dependencies: - buf-compare "^1.0.0" - is-error "^2.2.0" - -core-js@^2.0.0, core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -create-error-class@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - dependencies: - capture-stack-trace "^1.0.0" - -cross-spawn@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-time@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07" - -debug@2.2.0, debug@^2.1.1, debug@^2.2.0, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - dependencies: - is-obj "^1.0.0" - -duplexer2@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - -eastasianwidth@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -empower-core@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.1.tgz#6c187f502fcef7554d57933396aac655483772b1" - dependencies: - call-signature "0.0.2" - core-js "^2.0.0" - -error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" - dependencies: - is-arrayish "^0.2.1" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -espower-location-detector@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" - dependencies: - is-url "^1.2.1" - path-is-absolute "^1.0.0" - source-map "^0.5.0" - xtend "^4.0.0" - -espurify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.6.0.tgz#6cb993582d9422bd6f2d4b258aadb14833f394f0" - dependencies: - core-js "^2.0.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -figures@^1.4.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -filled-array@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -findit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/findit/-/findit-0.1.2.tgz#ac7fe600cd6a32a35672836b74cf6f1dde2e11f8" - dependencies: - seq ">=0.1.7" - -fn-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" - -for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" - dependencies: - for-in "^0.1.5" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.0.17" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -fstream-ignore@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - supports-color "^0.2.0" - wide-align "^1.1.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -gently@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/gently/-/gently-0.8.0.tgz#bc385db99ec1994dd6a44368e0abeb482b192b2c" - -get-port@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-2.1.0.tgz#8783f9dcebd1eea495a334e1a6a251e78887ab1a" - dependencies: - pinkie-promise "^2.0.0" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@7.0.5, glob@^7.0.3, glob@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.0.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" - -globby@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -got@^5.0.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" - dependencies: - create-error-class "^3.0.1" - duplexer2 "^0.1.4" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - node-status-codes "^1.0.0" - object-assign "^4.0.1" - parse-json "^2.1.0" - pinkie-promise "^2.0.0" - read-all-stream "^3.0.0" - readable-stream "^2.0.5" - timed-out "^3.0.0" - unzip-response "^1.0.2" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -"hashish@>=0.0.2 <0.1", hashish@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554" - dependencies: - traverse ">=0.2.4" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -ignore-by-default@^1.0.0, ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - -invariant@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -irregular-plurals@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-ci@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" - dependencies: - ci-info "^1.0.0" - -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-error@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0, is-finite@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - dependencies: - symbol-observable "^0.2.2" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-stream@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-url@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -js-tokens@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" - -js-tokens@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" - -jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" - dependencies: - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -last-line-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/last-line-stream/-/last-line-stream-1.0.0.tgz#d1b64d69f86ff24af2d04883a2ceee14520a5600" - dependencies: - through2 "^2.0.0" - -latest-version@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" - dependencies: - package-json "^2.0.0" - -lazy-req@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" - -load-json-file@^1.0.0, load-json-file@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.debounce@^4.0.3: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.difference@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isequal@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash@^4.2.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -loud-rejection@^1.0.0, loud-rejection@^1.2.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - -lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -matcher@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-0.1.2.tgz#ef20cbde64c24c50cc61af5b83ee0b1b8ff00101" - dependencies: - escape-string-regexp "^1.0.4" - -max-timeout@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/max-timeout/-/max-timeout-1.0.0.tgz#b68f69a2f99e0b476fd4cb23e2059ca750715e1f" - -md5-hex@^1.2.0, md5-hex@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" - dependencies: - md5-o-matic "^0.1.1" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" - dependencies: - mime-db "~1.26.0" - -minimatch@^3.0.0, minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.5" - glob "7.0.5" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -ms@0.7.1, ms@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - -nan@^2.3.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" - -node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" - -node-status-codes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" - -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" - -npmlog@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -observable-to-promise@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-0.4.0.tgz#28afe71645308f2d41d71f47ad3fece1a377e52b" - dependencies: - is-observable "^0.2.0" - symbol-observable "^0.2.2" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -option-chain@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/option-chain/-/option-chain-0.1.1.tgz#e9b811e006f1c0f54802f28295bfc8970f8dcfbd" - dependencies: - object-assign "^4.0.1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -package-hash@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-1.2.0.tgz#003e56cd57b736a6ed6114cc2b81542672770e44" - dependencies: - md5-hex "^1.3.0" - -package-json@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" - dependencies: - got "^5.0.0" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.1.0, parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-ms@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-0.1.2.tgz#dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e" - -parse-ms@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670" - dependencies: - pinkie "^1.0.0" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-conf@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-1.1.3.tgz#378e56d6fd13e88bfb6f4a25df7a83faabddba5b" - dependencies: - find-up "^1.0.0" - load-json-file "^1.1.0" - object-assign "^4.0.1" - symbol "^0.2.1" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -plur@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" - -plur@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" - dependencies: - irregular-plurals "^1.0.0" - -power-assert-context-formatter@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf" - dependencies: - core-js "^2.0.0" - power-assert-context-traversal "^1.1.1" - -power-assert-context-traversal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9" - dependencies: - core-js "^2.0.0" - estraverse "^4.1.0" - -power-assert-renderer-assertion@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98" - dependencies: - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.1.1" - -power-assert-renderer-base@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" - -power-assert-renderer-diagram@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.1.tgz#7e0c82cc08a84b155e51b5ae94f59709778a65fb" - dependencies: - core-js "^2.0.0" - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.1.1" - stringifier "^1.3.0" - -power-assert-renderer-succinct@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-renderer-succinct/-/power-assert-renderer-succinct-1.1.1.tgz#c2a468b23822abd6f80e2aba5322347b09df476e" - dependencies: - core-js "^2.0.0" - power-assert-renderer-diagram "^1.1.1" - -power-assert-util-string-width@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592" - dependencies: - eastasianwidth "^0.1.1" - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -pretty-ms@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-0.2.2.tgz#da879a682ff33a37011046f13d627f67c73b84f6" - dependencies: - parse-ms "^0.1.0" - -pretty-ms@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" - dependencies: - is-finite "^1.0.1" - parse-ms "^1.0.0" - plur "^1.0.0" - -private@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" - -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" - -rc@^1.0.1, rc@^1.1.6, rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~1.0.4" - -read-all-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" - dependencies: - pinkie-promise "^2.0.0" - readable-stream "^2.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" - -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" - dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -registry-auth-token@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" - dependencies: - rc "^1.1.6" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@^2.11.4, request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -require-precompiled@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa" - -resolve-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f" - dependencies: - resolve-from "^2.0.0" - -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - dependencies: - glob "^7.0.5" - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -seq@>=0.1.7: - version "0.3.5" - resolved "https://registry.yarnpkg.com/seq/-/seq-0.3.5.tgz#ae02af3a424793d8ccbf212d69174e0c54dffe38" - dependencies: - chainsaw ">=0.0.7 <0.1" - hashish ">=0.0.2 <0.1" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sort-keys@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-map-support@^0.4.0, source-map-support@^0.4.2: - version "0.4.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.9.tgz#45eaa04f067e049d987b27599ed014a37750aaff" - dependencies: - source-map "^0.5.3" - -source-map@^0.5.0, source-map@^0.5.3: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -sshpk@^1.7.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stack-utils@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-0.4.0.tgz#940cb82fccfa84e8ff2f3fdf293fe78016beccd1" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringifier@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959" - dependencies: - core-js "^2.0.0" - traverse "^0.6.6" - type-name "^2.0.1" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - -symbol@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7" - -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" - dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" - -tar@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -the-argv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -time-require@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98" - dependencies: - chalk "^0.4.0" - date-time "^0.1.1" - pretty-ms "^0.2.1" - text-table "^0.2.0" - -timed-out@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" - -to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" - -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" - -traverse@>=0.2.4, traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" - -uid-number@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" - -unique-temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385" - dependencies: - mkdirp "^0.5.1" - os-tmpdir "^1.0.1" - uid2 "0.0.3" - -unzip-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" - -update-notifier@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" - dependencies: - boxen "^0.6.0" - chalk "^1.0.0" - configstore "^2.0.0" - is-npm "^1.0.0" - latest-version "^2.0.0" - lazy-req "^1.1.0" - semver-diff "^2.0.0" - xdg-basedir "^2.0.0" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - -urun@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/urun/-/urun-0.0.6.tgz#e0fa856980367d86bf146e180bc3890320ab1d2f" - dependencies: - utest "0.0.2" - -utest@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/utest/-/utest-0.0.2.tgz#3862e2975309ea5de0940444a6c6ee0179726a16" - -utest@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/utest/-/utest-0.0.8.tgz#fc09451fe697b9008d0c432fe0db439d6cf37914" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" - -which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" - dependencies: - isexe "^1.1.1" - -wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" - dependencies: - string-width "^1.0.1" - -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" - dependencies: - string-width "^1.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^1.1.2, write-file-atomic@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-json-file@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-1.2.0.tgz#2d5dfe96abc3c889057c93971aa4005efb548134" - dependencies: - graceful-fs "^4.1.2" - mkdirp "^0.5.1" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - sort-keys "^1.1.1" - write-file-atomic "^1.1.2" - -write-pkg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-1.0.0.tgz#aeb8aa9d4d788e1d893dfb0854968b543a919f57" - dependencies: - write-json-file "^1.1.0" - -xdg-basedir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" - dependencies: - os-homedir "^1.0.0" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -yallist@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" diff --git a/tests/packagedcode/test_npm.py b/tests/packagedcode/test_npm.py index a9e5940be4d..89c4a1d4aae 100644 --- a/tests/packagedcode/test_npm.py +++ b/tests/packagedcode/test_npm.py @@ -11,11 +11,11 @@ import pytest -from commoncode.resource import Codebase - from packagedcode import npm from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES +from scancode.cli_test_utils import run_scan_click +from scancode.cli_test_utils import check_json_scan class TestNpm(PackageTester): @@ -59,231 +59,269 @@ def test_parse_person_dict4(self): 'url': 'http://example.com'} assert npm.parse_person(test) == ('Isaac Z. Schlueter', 'me@this.com' , 'http://example.com') - def test_is_manifest_package_json(self): + def test_is_datafile_package_json(self): test_file = self.get_test_loc('npm/dist/package.json') - assert npm.PackageJson.is_package_data_file(test_file) + assert npm.NpmPackageJsonHandler.is_datafile(test_file) def test_parse_dist_with_string_values(self): test_file = self.get_test_loc('npm/dist/package.json') expected_loc = self.get_test_loc('npm/dist/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_as_installed(self): test_file = self.get_test_loc('npm/as_installed/package.json') expected_loc = self.get_test_loc('npm/as_installed/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_authors_list_dicts(self): # See: https://github.com/csscomb/grunt-csscomb/blob/master/package.json test_file = self.get_test_loc('npm/authors_list_dicts/package.json') expected_loc = self.get_test_loc('npm/authors_list_dicts/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_authors_list_strings(self): # See: https://github.com/chenglou/react-motion/blob/master/package.json test_file = self.get_test_loc('npm/authors_list_strings/package.json') expected_loc = self.get_test_loc('npm/authors_list_strings/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_authors_list_strings2(self): # See: https://github.com/gomfunkel/node-exif/blob/master/package.json test_file = self.get_test_loc('npm/authors_list_strings2/package.json') expected_loc = self.get_test_loc('npm/authors_list_strings2/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_basic(self): test_file = self.get_test_loc('npm/basic/package.json') expected_loc = self.get_test_loc('npm/basic/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_bundleddeps(self): test_file = self.get_test_loc('npm/bundledDeps/package.json') expected_loc = self.get_test_loc('npm/bundledDeps/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_faulty_npm(self): test_file = self.get_test_loc('npm/casepath/package.json') expected_loc = self.get_test_loc('npm/casepath/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_legacy_licenses(self): test_file = self.get_test_loc('npm/chartist/package.json') expected_loc = self.get_test_loc('npm/chartist/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_from_npmjs(self): test_file = self.get_test_loc('npm/from_npmjs/package.json') expected_loc = self.get_test_loc('npm/from_npmjs/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_package_json_from_tarball_with_deps(self): test_file = self.get_test_loc('npm/from_tarball/package.json') expected_loc = self.get_test_loc('npm/from_tarball/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_invalid_json(self): test_file = self.get_test_loc('npm/invalid/package.json') try: - npm.PackageJson.recognize(test_file) + npm.NpmPackageJsonHandler.parse(test_file) except ValueError as e: assert 'Expecting value: line 60 column 3' in str(e) def test_parse_keywords(self): test_file = self.get_test_loc('npm/keywords/package.json') expected_loc = self.get_test_loc('npm/keywords/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_legacy_licenses_as_dict(self): test_file = self.get_test_loc('npm/legacy_license_dict/package.json') expected_loc = self.get_test_loc('npm/legacy_license_dict/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_double_legacy_licenses_as_dict(self): test_file = self.get_test_loc('npm/double_license/package.json') expected_loc = self.get_test_loc('npm/double_license/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_nodep(self): test_file = self.get_test_loc('npm/nodep/package.json') expected_loc = self.get_test_loc('npm/nodep/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_does_not_crash_if_partial_repo_url(self): test_file = self.get_test_loc('npm/repo_url/package.json') expected_loc = self.get_test_loc('npm/repo_url/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_scoped_package_1(self): test_file = self.get_test_loc('npm/scoped1/package.json') expected_loc = self.get_test_loc('npm/scoped1/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_scoped_package_2(self): test_file = self.get_test_loc('npm/scoped2/package.json') expected_loc = self.get_test_loc('npm/scoped2/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_from_npm_authors_with_email_list(self): # See: sequelize test_file = self.get_test_loc('npm/sequelize/package.json') expected_loc = self.get_test_loc('npm/sequelize/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_from_urls_dict_legacy_is_ignored(self): test_file = self.get_test_loc('npm/urls_dict/package.json') expected_loc = self.get_test_loc('npm/urls_dict/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_from_uri_vcs(self): test_file = self.get_test_loc('npm/uri_vcs/package.json') expected_loc = self.get_test_loc('npm/uri_vcs/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_registry_old_format(self): test_file = self.get_test_loc('npm/old_registry/package.json') expected_loc = self.get_test_loc('npm/old_registry/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_homepage_as_list(self): test_file = self.get_test_loc('npm/homepage-as-list/package.json') expected_loc = self.get_test_loc('npm/homepage-as-list/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_invalid_dep(self): test_file = self.get_test_loc('npm/invalid-dep/package.json') expected_loc = self.get_test_loc('npm/invalid-dep/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_utils_merge_1_0_0(self): test_file = self.get_test_loc('npm/utils-merge-1.0.0/package.json') expected_loc = self.get_test_loc( 'npm/utils-merge-1.0.0/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_mime_1_3_4(self): test_file = self.get_test_loc('npm/mime-1.3.4/package.json') expected_loc = self.get_test_loc( 'npm/mime-1.3.4/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_express_jwt_3_4_0(self): test_file = self.get_test_loc('npm/express-jwt-3.4.0/package.json') expected_loc = self.get_test_loc( 'npm/express-jwt-3.4.0/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_is_datafile_package_lock_json_v1(self): + test_file = self.get_test_loc('npm/package-lock-v1/package-lock.json') + assert npm.NpmPackageLockJsonHandler.is_datafile(test_file) + + def test_parse_package_lock_v1(self): + test_file = self.get_test_loc('npm/package-lock-v1/package-lock.json') + expected_loc = self.get_test_loc( + 'npm/package-lock-v1/package-lock.json-expected') + packages = npm.NpmPackageLockJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_is_manifest_package_lock_json(self): - test_file = self.get_test_loc('npm/package-lock/package-lock.json') - assert npm.PackageLockJson.is_package_data_file(test_file) + def test_is_datafile_package_lock_json_v2(self): + test_file = self.get_test_loc('npm/package-lock-v2/package-lock.json') + assert npm.NpmPackageLockJsonHandler.is_datafile(test_file) - def test_parse_package_lock(self): - test_file = self.get_test_loc('npm/package-lock/package-lock.json') + def test_parse_package_lock_v2(self): + test_file = self.get_test_loc('npm/package-lock-v2/package-lock.json') expected_loc = self.get_test_loc( - 'npm/package-lock/package-lock.json-expected') - packages = npm.PackageLockJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + 'npm/package-lock-v2/package-lock.json-expected') + packages = npm.NpmPackageLockJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_is_manifest_npm_shrinkwrap_json(self): + def test_parse_package_lock_v2_2(self): + test_file = self.get_test_loc('npm/package-lock-v2-2/package-lock.json') + expected_loc = self.get_test_loc( + 'npm/package-lock-v2-2/package-lock.json-expected') + packages = npm.NpmPackageLockJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_is_datafile_npm_shrinkwrap_json(self): test_file = self.get_test_loc('npm/npm-shrinkwrap/npm-shrinkwrap.json') - assert npm.PackageLockJson.is_package_data_file(test_file) + assert npm.NpmShrinkwrapJsonHandler.is_datafile(test_file) def test_parse_npm_shrinkwrap(self): test_file = self.get_test_loc('npm/npm-shrinkwrap/npm-shrinkwrap.json') expected_loc = self.get_test_loc( 'npm/npm-shrinkwrap/npm-shrinkwrap.json-expected') - packages = npm.PackageLockJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmShrinkwrapJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_name(self): test_file = self.get_test_loc('npm/with_name/package.json') expected_loc = self.get_test_loc('npm/with_name/package.json.expected') - packages = npm.PackageJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_without_name(self): test_file = self.get_test_loc('npm/without_name/package.json') try: - npm.PackageJson.recognize(test_file) + npm.NpmPackageJsonHandler.parse(test_file) except AttributeError as e: assert "'NoneType' object has no attribute 'to_dict'" in str(e) - def test_is_manifest_yarn_lock(self): - test_file = self.get_test_loc('npm/yarn-lock/yarn.lock') - assert npm.YarnLockJson.is_package_data_file(test_file) + def test_is_datafile_yarn_lock_v1(self): + test_file = self.get_test_loc('npm/yarn-lock/v1/yarn.lock') + assert npm.YarnLockV1Handler.is_datafile(test_file) + assert not npm.YarnLockV2Handler.is_datafile(test_file) - def test_parse_yarn_lock(self): - test_file = self.get_test_loc('npm/yarn-lock/yarn.lock') + def test_parse_yarn_lock_v1(self): + test_file = self.get_test_loc('npm/yarn-lock/v1/yarn.lock') expected_loc = self.get_test_loc( - 'npm/yarn-lock/yarn.lock-expected') - packages = npm.YarnLockJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + 'npm/yarn-lock/v1/yarn.lock-expected') + packages = npm.YarnLockV1Handler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_parse_yarn_lock_v1_complex(self): + test_file = self.get_test_loc('npm/yarn-lock/v1-complex/yarn.lock') + expected_loc = self.get_test_loc( + 'npm/yarn-lock/v1-complex/yarn.lock-expected') + packages = npm.YarnLockV1Handler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_is_datafile_yarn_lock_v2(self): + test_file = self.get_test_loc('npm/yarn-lock/v2/yarn.lock') + assert npm.YarnLockV2Handler.is_datafile(test_file) + assert not npm.YarnLockV1Handler.is_datafile(test_file) + + def test_parse_yarn_lock_v2(self): + test_file = self.get_test_loc('npm/yarn-lock/v2/yarn.lock') + expected_loc = self.get_test_loc( + 'npm/yarn-lock/v2/yarn.lock-expected') + packages = npm.YarnLockV2Handler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_vcs_repository_mapper(self): package = MockPackage() @@ -308,16 +346,22 @@ def test_vcs_repository_mapper_handles_version_on_gh(self): assert result.vcs_url == expected def test_npm_get_package_resources(self): - test_loc = self.get_test_loc('npm/get_package_resources') - codebase = Codebase(test_loc) - root = codebase.root - expected = [ - 'get_package_resources', - 'get_package_resources/package.json', - 'get_package_resources/this-should-be-returned' - ] - results = [r.path for r in npm.NpmPackage.get_package_resources(root, codebase)] - assert results == expected + test_file = self.get_test_loc('npm/get_package_resources') + expected_file = self.get_test_loc('npm/get_package_resources.scan.expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES + ) + + def test_scan_cli_works(self): + test_file = self.get_test_loc('npm/scan-nested/scan') + expected_file = self.get_test_loc('npm/scan-nested/scan.expected.json', must_exist=False) + result_file = self.get_temp_file('results.json') + run_scan_click(['--package', test_file, '--json', result_file]) + check_json_scan( + expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES + ) test_data = [ @@ -328,11 +372,11 @@ def test_npm_get_package_resources(self): ([{'type': 'Freeware', 'url': 'https://github.com/foor/bar'}], 'unknown-license-reference'), ([{'type': 'patent grant', 'url': 'Freeware'}], 'unknown'), - ([{'type': 'GPLv2', 'url': 'https://example.com/licenses/GPLv2'}, + ([{'type': 'GPLv2', 'url': 'https://example.com/licenses/GPLv2'}, {'type': 'MIT', 'url': 'https://example.com/licenses/MIT'}, ], '(gpl-2.0 AND (gpl-2.0 AND unknown)) AND (mit AND (mit AND unknown))'), - ([{'type': 'GPLv2', 'url': 'http://www.gnu.org/licenses/gpl-2.0.html'}, + ([{'type': 'GPLv2', 'url': 'http://www.gnu.org/licenses/gpl-2.0.html'}, {'type': 'MIT', 'url': 'https://example.com/licenses/MIT'}, ], 'gpl-2.0 AND (mit AND (mit AND unknown))'), @@ -341,6 +385,8 @@ def test_npm_get_package_resources(self): (['For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license.'], 'unknown-license-reference AND unknown'), (['See License in ./LICENSE file'], 'unknown-license-reference AND unknown'), ] + + @pytest.mark.parametrize('declared_license,expected_expression', test_data) def test_compute_normalized_license_from_declared(declared_license, expected_expression): result = npm.compute_normalized_license(declared_license) From 5a0650c66a73e64ba33e2c2b008dcd2c7d098615 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:18:21 +0200 Subject: [PATCH 26/36] Adopt new handler design for OCaml OPAM We now have this data file handler: * OpamFileHandler And we assemble this in a Package correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/opam.py | 295 +++++++----------- .../data/opam/sample1/output.opam.expected | 7 +- .../data/opam/sample2/output.opam.expected | 9 +- .../data/opam/sample3/output.opam.expected | 7 +- .../data/opam/sample4/output.opam.expected | 7 +- .../data/opam/sample5/output.opam.expected | 9 +- .../data/opam/sample6/output.opam.expected | 7 +- .../data/opam/sample7/output.opam.expected | 7 +- .../data/opam/sample8/output.opam.expected | 7 +- tests/packagedcode/test_opam.py | 34 +- 10 files changed, 159 insertions(+), 230 deletions(-) diff --git a/src/packagedcode/opam.py b/src/packagedcode/opam.py index 5812be38bbd..50861a5a805 100644 --- a/src/packagedcode/opam.py +++ b/src/packagedcode/opam.py @@ -7,72 +7,31 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import io -import logging import re -import attr from packageurl import PackageURL -from commoncode import filetype from packagedcode import models - """ -Handle opam package. +Handle OCaml opam package. """ -TRACE = False - -logger = logging.getLogger(__name__) - -if TRACE: - import sys - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - -@attr.s() -class OpamPackageData(models.PackageData): - - default_type = 'opam' +class OpamFileHandler(models.DatafileHandler): + datasource_id = 'opam_file' + path_patterns = ('*opam',) + default_package_type = 'opam' default_primary_language = 'Ocaml' - default_web_baseurl = 'https://opam.ocaml.org/packages' - default_download_baseurl = None - default_api_baseurl = 'https://github.com/ocaml/opam-repository/blob/master/packages' + description = 'Ocaml Opam file' + documentation_url = 'https://opam.ocaml.org/doc/Manual.html#Common-file-format' @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - if self.name: - return '{}/{}'.format(baseurl, self.name) - - def api_data_url(self, baseurl=default_api_baseurl): - if self.name and self.version: - return '{}/{}/{}.{}/opam'.format(baseurl, self.name, self.name, self.version) - - -@attr.s() -class OpamFile(OpamPackageData, models.PackageDataFile): - - file_patterns = ('*opam',) - extensions = ('.opam',) + def get_package_root(cls, resource, codebase): + return resource.parent(codebase) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('opam') - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): opams = parse_opam(location) package_dependencies = [] @@ -80,8 +39,8 @@ def recognize(cls, location): for dep in deps: package_dependencies.append( models.DependentPackage( - purl=dep.purl, - extracted_requirement=dep.version, + purl=dep["purl"], + extracted_requirement=dep["version"], scope='dependency', is_runtime=True, is_optional=False, @@ -91,6 +50,7 @@ def recognize(cls, location): name = opams.get('name') version = opams.get('version') + homepage_url = opams.get('homepage') download_url = opams.get('src') vcs_url = opams.get('dev-repo') @@ -100,6 +60,8 @@ def recognize(cls, location): md5 = opams.get('md5') sha256 = opams.get('sha256') sha512 = opams.get('sha512') + repository_homepage_url = get_repository_homepage_url(name) + api_data_url = get_api_data_url(name, version) short_desc = opams.get('synopsis') or '' long_desc = opams.get('description') or '' @@ -128,7 +90,9 @@ def recognize(cls, location): ) ) - package = cls( + package_data = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, name=name, version=version, vcs_url=vcs_url, @@ -142,86 +106,29 @@ def recognize(cls, location): declared_license=declared_license, description=description, parties=parties, - dependencies=package_dependencies + dependencies=package_dependencies, + api_data_url=api_data_url, + repository_homepage_url=repository_homepage_url, + primary_language=cls.default_primary_language ) - yield package + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) + yield package_data -@attr.s() -class OpamPackage(OpamPackageData, models.Package): - """ - A Opam Package that is created out of one/multiple opam package - manifests and package-like data, with it's files. - """ + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + return super().assign_package_to_parent_tree(package, resource, codebase) - @property - def manifests(self): - return [ - OpamFile - ] +def get_repository_homepage_url(name): + return name and '{https://opam.ocaml.org/packages}/{name}' -""" -Example:- - -Sample opam file(sample3.opam): -opam-version: "2.0" -version: "4.11.0+trunk" -synopsis: "OCaml development version" -depends: [ - "ocaml" {= "4.11.0" & post} - "base-unix" {post} -] -conflict-class: "ocaml-core-compiler" -flags: compiler -setenv: CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs" -build: [ - ["./configure" "--prefix=%{prefix}%"] - [make "-j%{jobs}%"] -] -install: [make "install"] -maintainer: "caml-list@inria.fr" -homepage: "https://github.com/ocaml/ocaml/" -bug-reports: "https://github.com/ocaml/ocaml/issues" -authors: [ - "Xavier Leroy" - "Damien Doligez" - "Alain Frisch" - "Jacques Garrigue" -] - ->>> p = parse_opam('sample3.opam') ->>> for k, v in p.items(): ->>> print(k, v) - -Output: -opam-version 2.0 -version 4.11.0+trunk -synopsis OCaml development version -depends [Opam(name='ocaml', version='= 4.11.0 & post'), Opam(name='base-unix', version='post')] -conflict-class ocaml-core-compiler -flags compiler -setenv CAML_LD_LIBRARY_PATH = %{lib}%/stublibs -build -install make install -maintainer ['caml-list@inria.fr'] -homepage https://github.com/ocaml/ocaml/ -bug-reports https://github.com/ocaml/ocaml/issues -authors ['Xavier Leroy', 'Damien Doligez', 'Alain Frisch', 'Jacques Garrigue'] -""" - -@attr.s() -class Opam(object): - name = attr.ib(default=None) - version = attr.ib(default=None) - @property - def purl(self): - return PackageURL( - type='opam', - name=self.name - ).to_string() +def get_api_data_url(name, version): + if name and version: + return f'https://github.com/ocaml/opam-repository/blob/master/packages/{name}/{name}.{version}/opam' # Regex expressions to parse file lines @@ -259,78 +166,92 @@ def purl(self): >>> assert p.group('version') == ('{= "1.0.0"}') """ + def parse_opam(location): """ - Return a mapping of package data collected from the opam OCaml package manifest file at `location`. + Return a mapping of package data collected from the opam OCaml package + manifest file at ``location``. + """ + with open(location) as od: + text = od.read() + return parse_opam_from_text(text) + + +def parse_opam_from_text(text): + """ + Return a mapping of package data collected from the opam OCaml package + manifest ``text``. """ - with io.open(location, encoding='utf-8') as data: - lines = data.readlines() opam_data = {} + lines = text.splitlines() for i, line in enumerate(lines): parsed_line = parse_file_line(line) - if parsed_line: - key = parsed_line.group('key').strip() - value = parsed_line.group('value').strip() - if key == 'description': # Get multiline description - value = '' - for cont in lines[i+1:]: - value += ' ' + cont.strip() - if '"""' in cont: + if not parsed_line: + continue + key = parsed_line.group('key').strip() + value = parsed_line.group('value').strip() + if key == 'description': # Get multiline description + value = '' + for cont in lines[i + 1:]: + value += ' ' + cont.strip() + if '"""' in cont: + break + + opam_data[key] = clean_data(value) + + if key == 'maintainer': + stripped_val = value.strip('["] ') + stripped_val = stripped_val.split('" "') + opam_data[key] = stripped_val + elif key == 'authors': + if '[' in line: # If authors are present in multiple lines + for authors in lines[i + 1:]: + value += ' ' + authors.strip() + if ']' in authors: break - + value = value.strip('["] ') + else: + value = clean_data(value) + value = value.split('" "') + opam_data[key] = value + elif key == 'depends': # Get multiline dependencies + value = [] + for dep in lines[i + 1:]: + if ']' in dep: + break + parsed_dep = parse_dep(dep) + if parsed_dep: + version = parsed_dep.group('version').strip('{ } ').replace('"', '') + name = parsed_dep.group('name').strip() + value.append(dict( + purl=PackageURL(type='opam', name=name).to_string(), + version=version, + )) + opam_data[key] = value + + elif key == 'src': # Get multiline src + if not value: + value = lines[i + 1].strip() opam_data[key] = clean_data(value) - - if key == 'maintainer': - stripped_val = value.strip('["] ') - stripped_val = stripped_val.split('" "') - opam_data[key] = stripped_val - elif key == 'authors': - if '[' in line: # If authors are present in multiple lines - for authors in lines[i+1:]: - value += ' ' + authors.strip() - if ']' in authors: - break - value = value.strip('["] ') - else: - value = clean_data(value) - value = value.split('" "') - opam_data[key] = value - elif key == 'depends': # Get multiline dependencies - value = [] - for dep in lines[i+1:]: - if ']' in dep: + elif key == 'checksum': # Get checksums + if '[' in line: + for checksum in lines[i + 1:]: + checksum = checksum.strip('" ') + if ']' in checksum: break - parsed_dep = parse_dep(dep) - if parsed_dep: - value.append(Opam( - name=parsed_dep.group('name').strip(), - version=parsed_dep.group('version').strip('{ } ').replace('"', '') - ) - ) - opam_data[key] = value - elif key == 'src': # Get multiline src - if not value: - value = lines[i+1].strip() - opam_data[key] = clean_data(value) - elif key == 'checksum': # Get checksums - if '[' in line: - for checksum in lines[i+1:]: - checksum = checksum.strip('" ') - if ']' in checksum: - break - parsed_checksum = parse_checksum(checksum) - key = clean_data(parsed_checksum.group('key').strip()) - value = clean_data(parsed_checksum.group('value').strip()) - opam_data[key] = value - else: - value = value.strip('" ') - parsed_checksum = parse_checksum(value) - if parsed_checksum: - key = clean_data(parsed_checksum.group('key').strip()) - value = clean_data(parsed_checksum.group('value').strip()) - opam_data[key] = value + parsed_checksum = parse_checksum(checksum) + key = clean_data(parsed_checksum.group('key').strip()) + value = clean_data(parsed_checksum.group('value').strip()) + opam_data[key] = value + else: + value = value.strip('" ') + parsed_checksum = parse_checksum(value) + if parsed_checksum: + key = clean_data(parsed_checksum.group('key').strip()) + value = clean_data(parsed_checksum.group('value').strip()) + opam_data[key] = value return opam_data diff --git a/tests/packagedcode/data/opam/sample1/output.opam.expected b/tests/packagedcode/data/opam/sample1/output.opam.expected index e3284a8df56..e10b1b9279a 100644 --- a/tests/packagedcode/data/opam/sample1/output.opam.expected +++ b/tests/packagedcode/data/opam/sample1/output.opam.expected @@ -110,8 +110,8 @@ "license_expression": "isc", "declared_license": "ISC", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -205,9 +205,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample2/output.opam.expected b/tests/packagedcode/data/opam/sample2/output.opam.expected index fa4266dd7af..183e126eb86 100644 --- a/tests/packagedcode/data/opam/sample2/output.opam.expected +++ b/tests/packagedcode/data/opam/sample2/output.opam.expected @@ -40,8 +40,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -99,9 +99,10 @@ "resolved_package": {} } ], - "purl": "pkg:opam/js_of_ocaml", - "repository_homepage_url": "https://opam.ocaml.org/packages/js_of_ocaml", + "repository_homepage_url": "{https://opam.ocaml.org/packages}/{name}", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": "pkg:opam/js_of_ocaml" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample3/output.opam.expected b/tests/packagedcode/data/opam/sample3/output.opam.expected index 6d75de13392..e67d16df627 100644 --- a/tests/packagedcode/data/opam/sample3/output.opam.expected +++ b/tests/packagedcode/data/opam/sample3/output.opam.expected @@ -54,8 +54,8 @@ "license_expression": "gpl-3.0", "declared_license": "GPL-3.0-only", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -86,9 +86,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample4/output.opam.expected b/tests/packagedcode/data/opam/sample4/output.opam.expected index 59ad749fa98..932506b68f7 100644 --- a/tests/packagedcode/data/opam/sample4/output.opam.expected +++ b/tests/packagedcode/data/opam/sample4/output.opam.expected @@ -47,8 +47,8 @@ "license_expression": "lgpl-3.0 WITH ocaml-lgpl-linking-exception", "declared_license": "LGPL-3.0-only with OCaml-LGPL-linking-exception", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -88,9 +88,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample5/output.opam.expected b/tests/packagedcode/data/opam/sample5/output.opam.expected index 8fea1f63cae..b3c02001a90 100644 --- a/tests/packagedcode/data/opam/sample5/output.opam.expected +++ b/tests/packagedcode/data/opam/sample5/output.opam.expected @@ -40,8 +40,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -90,9 +90,10 @@ "resolved_package": {} } ], - "purl": "pkg:opam/bap-elf@1.0.0", - "repository_homepage_url": "https://opam.ocaml.org/packages/bap-elf", + "repository_homepage_url": "{https://opam.ocaml.org/packages}/{name}", "repository_download_url": null, - "api_data_url": "https://github.com/ocaml/opam-repository/blob/master/packages/bap-elf/bap-elf.1.0.0/opam" + "api_data_url": "https://github.com/ocaml/opam-repository/blob/master/packages/bap-elf/bap-elf.1.0.0/opam", + "datasource_id": "opam_file", + "purl": "pkg:opam/bap-elf@1.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample6/output.opam.expected b/tests/packagedcode/data/opam/sample6/output.opam.expected index 71d83b7116e..cea7cdb1868 100644 --- a/tests/packagedcode/data/opam/sample6/output.opam.expected +++ b/tests/packagedcode/data/opam/sample6/output.opam.expected @@ -40,8 +40,8 @@ "license_expression": "gpl-2.0", "declared_license": "GPL-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -54,9 +54,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample7/output.opam.expected b/tests/packagedcode/data/opam/sample7/output.opam.expected index 6a5072f2554..56af730bd76 100644 --- a/tests/packagedcode/data/opam/sample7/output.opam.expected +++ b/tests/packagedcode/data/opam/sample7/output.opam.expected @@ -47,8 +47,8 @@ "license_expression": "lgpl-3.0 WITH ocaml-lgpl-linking-exception", "declared_license": "LGPL-3.0-only with OCaml-LGPL-linking-exception", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -88,9 +88,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/opam/sample8/output.opam.expected b/tests/packagedcode/data/opam/sample8/output.opam.expected index 59ad749fa98..932506b68f7 100644 --- a/tests/packagedcode/data/opam/sample8/output.opam.expected +++ b/tests/packagedcode/data/opam/sample8/output.opam.expected @@ -47,8 +47,8 @@ "license_expression": "lgpl-3.0 WITH ocaml-lgpl-linking-exception", "declared_license": "LGPL-3.0-only with OCaml-LGPL-linking-exception", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -88,9 +88,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/test_opam.py b/tests/packagedcode/test_opam.py index 5d3d23c80a8..043bc0f7b0d 100644 --- a/tests/packagedcode/test_opam.py +++ b/tests/packagedcode/test_opam.py @@ -21,55 +21,55 @@ class TestOcaml(PackageTester): def test_is_manifest_cargo_toml(self): test_file = self.get_test_loc('opam/sample1/sample1.opam') - assert opam.OpamFile.is_package_data_file(test_file) + assert opam.OpamFileHandler.is_datafile(test_file) def test_parse_sample1(self): test_file = self.get_test_loc('opam/sample1/sample1.opam') expected_loc = self.get_test_loc('opam/sample1/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample2(self): test_file = self.get_test_loc('opam/sample2/sample2.opam') expected_loc = self.get_test_loc('opam/sample2/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample3(self): test_file = self.get_test_loc('opam/sample3/sample3.opam') expected_loc = self.get_test_loc('opam/sample3/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample4(self): test_file = self.get_test_loc('opam/sample4/opam') expected_loc = self.get_test_loc('opam/sample4/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample5(self): test_file = self.get_test_loc('opam/sample5/opam') expected_loc = self.get_test_loc('opam/sample5/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample6(self): test_file = self.get_test_loc('opam/sample6/sample6.opam') expected_loc = self.get_test_loc('opam/sample6/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample7(self): test_file = self.get_test_loc('opam/sample7/sample7.opam') expected_loc = self.get_test_loc('opam/sample7/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_sample8(self): test_file = self.get_test_loc('opam/sample8/opam') expected_loc = self.get_test_loc('opam/sample8/output.opam.expected') - packages = opam.OpamFile.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = opam.OpamFileHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) FILE_LINE = [ From 8d67fd808e2848f836830fdb913f6ebcb602e0c7 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:19:27 +0200 Subject: [PATCH 27/36] Adopt new handler design for npm packages We now have these data file handlers: * PhpComposerJsonHandler * PhpComposerLockHandler And we assemble these in Packages correctly Signed-off-by: Philippe Ombredanne --- src/packagedcode/phpcomposer.py | 209 +++++++---------- .../a-timer/composer.json.expected | 7 +- .../phpcomposer/composer.lock-expected.json | 217 ++++++++++-------- .../phpcomposer/fake/composer.json.expected | 7 +- .../phpcomposer/fake2/composer.json.expected | 9 +- .../framework/composer.json.expected | 7 +- .../phpcomposer/modern/composer.json.expected | 9 +- .../phpcomposer/slim/composer.json.expected | 7 +- tests/packagedcode/test_phpcomposer.py | 32 +-- 9 files changed, 253 insertions(+), 251 deletions(-) diff --git a/src/packagedcode/phpcomposer.py b/src/packagedcode/phpcomposer.py index d0f639696d1..39fdc3979c0 100644 --- a/src/packagedcode/phpcomposer.py +++ b/src/packagedcode/phpcomposer.py @@ -7,20 +7,13 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -from functools import partial import io import json -import logging -import sys - -import attr +from functools import partial -from commoncode import filetype -from commoncode import fileutils from packagedcode import models from packagedcode.utils import combine_expressions - """ Parse PHP composer package manifests, see https://getcomposer.org/ and https://packagist.org/ @@ -29,109 +22,101 @@ similar. """ -TRACE = False - - -def logger_debug(*args): - pass - -logger = logging.getLogger(__name__) - -if TRACE: - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - - -@attr.s() -class PhpComposerPackageData(models.PackageData): - - mimetypes = ('application/json',) - - default_type = 'composer' - default_primary_language = 'PHP' - default_web_baseurl = 'https://packagist.org' - default_download_baseurl = None - default_api_baseurl = 'https://packagist.org/p' +class BasePhpComposerHandler(models.DatafileHandler): @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - if self.namespace: - return '{}/packages/{}/{}'.format(baseurl, self.namespace, self.name) + def assemble(cls, package_data, resource, codebase): + datafile_name_patterns = ( + 'composer.json', + 'composer.lock', + ) + + if resource.has_parent(): + dir_resource=resource.parent(codebase) else: - return '{}/packages/{}'.format(baseurl, self.name) + dir_resource=resource - def api_data_url(self, baseurl=default_api_baseurl): - if self.namespace: - return '{}/packages/{}/{}.json'.format(baseurl, self.namespace, self.name) - else: - return '{}/packages/{}.json'.format(baseurl, self.name) + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=dir_resource, + codebase=codebase, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + return super().assign_package_to_parent_tree(package, resource, codebase) - def compute_normalized_license(self): + @classmethod + def compute_normalized_license(cls, package): """ Per https://getcomposer.org/doc/04-schema.md#license this is an expression """ - return compute_normalized_license(self.declared_license) - + return compute_normalized_license(package.declared_license) -@attr.s() -class ComposerJson(PhpComposerPackageData, models.PackageDataFile): - file_patterns = ( - 'composer.json', - ) - extensions = ('.json',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and fileutils.file_name(location).lower() == 'composer.json' +class PhpComposerJsonHandler(BasePhpComposerHandler): + datasource_id = 'php_composer_json' + path_patterns = ('*composer.json',) + default_package_type = 'composer' + default_primary_language = 'PHP' + description = 'PHP composer manifest' + documentation_url = 'https://getcomposer.org/doc/04-schema.md' @classmethod - def recognize(cls, location): + def parse(cls, location): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Yield one or more Package manifest objects given a file ``location`` + pointing to a package archive, manifest or similar. - Note that this is NOT exactly the packagist .json format (all are closely related of - course but have important (even if minor) differences. + Note that this is NOT exactly the packagist.json format (all are closely + related of course but have important (even if minor) differences. """ with io.open(location, encoding='utf-8') as loc: - package_data = json.load(loc) + package_json = json.load(loc) - yield build_package_data(cls, package_data) + yield build_package_data(package_json) -def build_package_data(cls, package_data): - - # A composer.json without name and description is not a usable PHP - # composer package. Name and description fields are required but - # only for published packages: - # https://getcomposer.org/doc/04-schema.md#name - # We want to catch both published and non-published packages here. - # Therefore, we use "private-package-without-a-name" as a package name if - # there is no name. +def get_repository_homepage_url(namespace, name): + if namespace and name: + return f'https://packagist.org/packages/{namespace}/{name}' + elif name: + return f'https://packagist.org/packages/{name}' + + +def get_api_data_url(namespace, name): + if namespace and name: + return f'https://packagist.org/p/packages/{namespace}/{name}.json' + elif name: + return f'https://packagist.org/p/packages/{name}.json' + + +def build_package_data(package_data): + + # Note: A composer.json without name and description is not a usable PHP + # composer package. Name and description fields are required but only for + # published packages: https://getcomposer.org/doc/04-schema.md#name We want + # to catch both published and non-published packages here. Therefore, we use + # None as a package name if there is no name. ns_name = package_data.get('name') is_private = False if not ns_name: ns = None - name = 'private-package-without-a-name' + name = None is_private = True else: ns, _, name = ns_name.rpartition('/') - package = cls( + package = models.PackageData( + datasource_id=PhpComposerJsonHandler.datasource_id, + type=PhpComposerJsonHandler.default_package_type, namespace=ns, name=name, + repository_homepage_url=get_repository_homepage_url(ns, name), + api_data_url=get_api_data_url(ns, name), + primary_language=PhpComposerJsonHandler.default_primary_language, ) # mapping of top level composer.json items to the Package object field name @@ -167,50 +152,41 @@ def build_package_data(cls, package_data): ] for source, func in field_mappers: - logger.debug('parse: %(source)r, %(func)r' % locals()) value = package_data.get(source) if value: if isinstance(value, str): value = value.strip() if value: func(value, package) + # Parse vendor from name value vendor_mapper(package) - return package -@attr.s() -class ComposerLock(PhpComposerPackageData, models.PackageDataFile): + if not package.license_expression and package.declared_license: + package.license_expression = models.compute_normalized_license(package.declared_license) - file_patterns = ( - 'composer.lock', - ) - extensions = ('.lock',) + return package - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and fileutils.file_name(location).lower() == 'composer.lock' - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. +class PhpComposerLockHandler(BasePhpComposerHandler): + datasource_id = 'php_composer_lock' + path_patterns = ('*composer.lock',) + default_package_type = 'composer' + default_primary_language = 'PHP' + description = 'PHP composer lockfile' + documentation_url = 'https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control' - Note that this is NOT exactly the packagist .json format (all are closely related of - course but have important (even if minor) differences. - """ + @classmethod + def parse(cls, location): with io.open(location, encoding='utf-8') as loc: package_data = json.load(loc) - + packages = [ - build_package_data(cls, p) + build_package_data(p) for p in package_data.get('packages', []) ] packages_dev = [ - build_package_data(cls, p) + build_package_data(p) for p in package_data.get('packages-dev', []) ] @@ -223,27 +199,17 @@ def recognize(cls, location): for p in packages_dev ] - yield cls(dependencies=required_deps + required_dev_deps) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=required_deps + required_dev_deps + ) for package in packages + packages_dev: yield package -@attr.s() -class PhpPackage(PhpComposerPackageData, models.Package): - """ - A PHP Package that is created out of one/multiple python package - manifests. - """ - - @property - def manifests(self): - return [ - ComposerJson, - ComposerLock - ] - - def compute_normalized_license(declared_license): """ Return a normalized license expression string detected from a list of @@ -429,4 +395,3 @@ def build_dep_package(package, scope, is_runtime, is_optional): is_optional=is_optional, is_resolved=True, ) - diff --git a/tests/packagedcode/data/phpcomposer/a-timer/composer.json.expected b/tests/packagedcode/data/phpcomposer/a-timer/composer.json.expected index e468be90eb3..6f8b73b369b 100644 --- a/tests/packagedcode/data/phpcomposer/a-timer/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/a-timer/composer.json.expected @@ -40,8 +40,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -72,9 +72,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/jandreasn/a-timer", "repository_homepage_url": "https://packagist.org/packages/jandreasn/a-timer", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json" + "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/jandreasn/a-timer" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/composer.lock-expected.json b/tests/packagedcode/data/phpcomposer/composer.lock-expected.json index 31ef36cf4a8..1c66c791f9b 100644 --- a/tests/packagedcode/data/phpcomposer/composer.lock-expected.json +++ b/tests/packagedcode/data/phpcomposer/composer.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -300,10 +300,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "php_composer_lock", + "purl": null }, { "type": "composer", @@ -376,8 +377,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -426,10 +427,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/doctrine/cache@v1.6.2", "repository_homepage_url": "https://packagist.org/packages/doctrine/cache", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/doctrine/cache.json" + "api_data_url": "https://packagist.org/p/packages/doctrine/cache.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/doctrine/cache@v1.6.2" }, { "type": "composer", @@ -474,8 +476,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -515,10 +517,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/guzzlehttp/cache-subscriber@0.2.0", "repository_homepage_url": "https://packagist.org/packages/guzzlehttp/cache-subscriber", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/guzzlehttp/cache-subscriber.json" + "api_data_url": "https://packagist.org/p/packages/guzzlehttp/cache-subscriber.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/guzzlehttp/cache-subscriber@0.2.0" }, { "type": "composer", @@ -563,8 +566,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -613,10 +616,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/guzzlehttp/guzzle@5.3.3", "repository_homepage_url": "https://packagist.org/packages/guzzlehttp/guzzle", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/guzzlehttp/guzzle.json" + "api_data_url": "https://packagist.org/p/packages/guzzlehttp/guzzle.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/guzzlehttp/guzzle@5.3.3" }, { "type": "composer", @@ -661,8 +665,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -720,10 +724,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/guzzlehttp/ringphp@1.1.1", "repository_homepage_url": "https://packagist.org/packages/guzzlehttp/ringphp", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/guzzlehttp/ringphp.json" + "api_data_url": "https://packagist.org/p/packages/guzzlehttp/ringphp.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/guzzlehttp/ringphp@1.1.1" }, { "type": "composer", @@ -768,8 +773,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -791,10 +796,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/guzzlehttp/streams@3.0.0", "repository_homepage_url": "https://packagist.org/packages/guzzlehttp/streams", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/guzzlehttp/streams.json" + "api_data_url": "https://packagist.org/p/packages/guzzlehttp/streams.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/guzzlehttp/streams@3.0.0" }, { "type": "composer", @@ -846,8 +852,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -968,10 +974,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/prestashop/circuit-breaker@v3.0.0", "repository_homepage_url": "https://packagist.org/packages/prestashop/circuit-breaker", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/prestashop/circuit-breaker.json" + "api_data_url": "https://packagist.org/p/packages/prestashop/circuit-breaker.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/prestashop/circuit-breaker@v3.0.0" }, { "type": "composer", @@ -1016,8 +1023,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1039,10 +1046,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/react/promise@v2.7.1", "repository_homepage_url": "https://packagist.org/packages/react/promise", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/react/promise.json" + "api_data_url": "https://packagist.org/p/packages/react/promise.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/react/promise@v2.7.1" }, { "type": "composer", @@ -1101,8 +1109,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1115,10 +1123,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/css-selector@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/css-selector", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/css-selector.json" + "api_data_url": "https://packagist.org/p/packages/symfony/css-selector.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/css-selector@v3.4.31" }, { "type": "composer", @@ -1177,8 +1186,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1209,10 +1218,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/composer/semver@1.5.0", "repository_homepage_url": "https://packagist.org/packages/composer/semver", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/composer/semver.json" + "api_data_url": "https://packagist.org/p/packages/composer/semver.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/composer/semver@1.5.0" }, { "type": "composer", @@ -1257,8 +1267,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1289,10 +1299,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/composer/xdebug-handler@1.3.3", "repository_homepage_url": "https://packagist.org/packages/composer/xdebug-handler", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/composer/xdebug-handler.json" + "api_data_url": "https://packagist.org/p/packages/composer/xdebug-handler.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/composer/xdebug-handler@1.3.3" }, { "type": "composer", @@ -1365,8 +1376,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1406,10 +1417,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/doctrine/annotations@v1.4.0", "repository_homepage_url": "https://packagist.org/packages/doctrine/annotations", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/doctrine/annotations.json" + "api_data_url": "https://packagist.org/p/packages/doctrine/annotations.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/doctrine/annotations@v1.4.0" }, { "type": "composer", @@ -1468,8 +1480,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1491,10 +1503,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/doctrine/lexer@1.0.2", "repository_homepage_url": "https://packagist.org/packages/doctrine/lexer", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/doctrine/lexer.json" + "api_data_url": "https://packagist.org/p/packages/doctrine/lexer.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/doctrine/lexer@1.0.2" }, { "type": "composer", @@ -1546,8 +1559,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1839,10 +1852,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/friendsofphp/php-cs-fixer@v2.15.3", "repository_homepage_url": "https://packagist.org/packages/friendsofphp/php-cs-fixer", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/friendsofphp/php-cs-fixer.json" + "api_data_url": "https://packagist.org/p/packages/friendsofphp/php-cs-fixer.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/friendsofphp/php-cs-fixer@v2.15.3" }, { "type": "composer", @@ -1887,8 +1901,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1919,10 +1933,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/paragonie/random_compat@v2.0.18", "repository_homepage_url": "https://packagist.org/packages/paragonie/random_compat", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/paragonie/random_compat.json" + "api_data_url": "https://packagist.org/p/packages/paragonie/random_compat.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/paragonie/random_compat@v2.0.18" }, { "type": "composer", @@ -1981,8 +1996,8 @@ "BSD-3-Clause" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2013,10 +2028,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/php-cs-fixer/diff@v1.3.0", "repository_homepage_url": "https://packagist.org/packages/php-cs-fixer/diff", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/php-cs-fixer/diff.json" + "api_data_url": "https://packagist.org/p/packages/php-cs-fixer/diff.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/php-cs-fixer/diff@v1.3.0" }, { "type": "composer", @@ -2054,8 +2070,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2104,10 +2120,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/prestashop/php-coding-standards@dev-master", "repository_homepage_url": "https://packagist.org/packages/prestashop/php-coding-standards", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/prestashop/php-coding-standards.json" + "api_data_url": "https://packagist.org/p/packages/prestashop/php-coding-standards.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/prestashop/php-coding-standards@dev-master" }, { "type": "composer", @@ -2152,8 +2169,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2166,10 +2183,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/psr/log@1.1.0", "repository_homepage_url": "https://packagist.org/packages/psr/log", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/psr/log.json" + "api_data_url": "https://packagist.org/p/packages/psr/log.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/psr/log@1.1.0" }, { "type": "composer", @@ -2214,8 +2232,8 @@ "BSD-3-Clause" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2264,10 +2282,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/squizlabs/php_codesniffer@3.4.2", "repository_homepage_url": "https://packagist.org/packages/squizlabs/php_codesniffer", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/squizlabs/php_codesniffer.json" + "api_data_url": "https://packagist.org/p/packages/squizlabs/php_codesniffer.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/squizlabs/php_codesniffer@3.4.2" }, { "type": "composer", @@ -2319,8 +2338,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2468,10 +2487,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/console@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/console", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/console.json" + "api_data_url": "https://packagist.org/p/packages/symfony/console.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/console@v3.4.31" }, { "type": "composer", @@ -2523,8 +2543,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2564,10 +2584,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/debug@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/debug", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/debug.json" + "api_data_url": "https://packagist.org/p/packages/symfony/debug.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/debug@v3.4.31" }, { "type": "composer", @@ -2619,8 +2640,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2705,10 +2726,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/event-dispatcher@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/event-dispatcher", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/event-dispatcher.json" + "api_data_url": "https://packagist.org/p/packages/symfony/event-dispatcher.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/event-dispatcher@v3.4.31" }, { "type": "composer", @@ -2760,8 +2782,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2783,10 +2805,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/filesystem@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/filesystem", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/filesystem.json" + "api_data_url": "https://packagist.org/p/packages/symfony/filesystem.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/filesystem@v3.4.31" }, { "type": "composer", @@ -2838,8 +2861,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2852,10 +2875,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/finder@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/finder", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/finder.json" + "api_data_url": "https://packagist.org/p/packages/symfony/finder.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/finder@v3.4.31" }, { "type": "composer", @@ -2907,8 +2931,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2921,10 +2945,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/options-resolver@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/options-resolver", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/options-resolver.json" + "api_data_url": "https://packagist.org/p/packages/symfony/options-resolver.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/options-resolver@v3.4.31" }, { "type": "composer", @@ -2976,8 +3001,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -2999,10 +3024,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/polyfill-ctype@v1.12.0", "repository_homepage_url": "https://packagist.org/packages/symfony/polyfill-ctype", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-ctype.json" + "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-ctype.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/polyfill-ctype@v1.12.0" }, { "type": "composer", @@ -3054,8 +3080,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3077,10 +3103,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/polyfill-mbstring@v1.12.0", "repository_homepage_url": "https://packagist.org/packages/symfony/polyfill-mbstring", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-mbstring.json" + "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-mbstring.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/polyfill-mbstring@v1.12.0" }, { "type": "composer", @@ -3132,8 +3159,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3155,10 +3182,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/polyfill-php70@v1.12.0", "repository_homepage_url": "https://packagist.org/packages/symfony/polyfill-php70", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-php70.json" + "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-php70.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/polyfill-php70@v1.12.0" }, { "type": "composer", @@ -3210,8 +3238,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3224,10 +3252,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/polyfill-php72@v1.12.0", "repository_homepage_url": "https://packagist.org/packages/symfony/polyfill-php72", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-php72.json" + "api_data_url": "https://packagist.org/p/packages/symfony/polyfill-php72.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/polyfill-php72@v1.12.0" }, { "type": "composer", @@ -3279,8 +3308,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3293,10 +3322,11 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/process@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/process", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/process.json" + "api_data_url": "https://packagist.org/p/packages/symfony/process.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/process@v3.4.31" }, { "type": "composer", @@ -3348,8 +3378,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -3362,9 +3392,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/symfony/stopwatch@v3.4.31", "repository_homepage_url": "https://packagist.org/packages/symfony/stopwatch", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/symfony/stopwatch.json" + "api_data_url": "https://packagist.org/p/packages/symfony/stopwatch.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/symfony/stopwatch@v3.4.31" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/fake/composer.json.expected b/tests/packagedcode/data/phpcomposer/fake/composer.json.expected index e0c682e41c5..ce40e128285 100644 --- a/tests/packagedcode/data/phpcomposer/fake/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/fake/composer.json.expected @@ -40,8 +40,8 @@ "license_expression": "lgpl-2.1 OR gpl-3.0-plus", "declared_license": "(LGPL-2.1-only or GPL-3.0-or-later)", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -72,9 +72,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/fake/fake", "repository_homepage_url": "https://packagist.org/packages/fake/fake", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/fake/fake.json" + "api_data_url": "https://packagist.org/p/packages/fake/fake.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/fake/fake" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/fake2/composer.json.expected b/tests/packagedcode/data/phpcomposer/fake2/composer.json.expected index 3bce37bb569..616e2eaf9ab 100644 --- a/tests/packagedcode/data/phpcomposer/fake2/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/fake2/composer.json.expected @@ -37,14 +37,14 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "lgpl-2.1 OR gpl-3.0-plus", + "license_expression": "lgpl-2.1 AND gpl-3.0-plus", "declared_license": [ "LGPL-2.1-only", "GPL-3.0-or-later" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -75,9 +75,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/fake/fake", "repository_homepage_url": "https://packagist.org/packages/fake/fake", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/fake/fake.json" + "api_data_url": "https://packagist.org/p/packages/fake/fake.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/fake/fake" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/framework/composer.json.expected b/tests/packagedcode/data/phpcomposer/framework/composer.json.expected index 6df6aacab66..2a219f34598 100644 --- a/tests/packagedcode/data/phpcomposer/framework/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/framework/composer.json.expected @@ -40,8 +40,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1305,9 +1305,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/narrowspark/framework", "repository_homepage_url": "https://packagist.org/packages/narrowspark/framework", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/narrowspark/framework.json" + "api_data_url": "https://packagist.org/p/packages/narrowspark/framework.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/narrowspark/framework" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/modern/composer.json.expected b/tests/packagedcode/data/phpcomposer/modern/composer.json.expected index 338cea04b5d..beb4f9fcfd7 100644 --- a/tests/packagedcode/data/phpcomposer/modern/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/modern/composer.json.expected @@ -22,11 +22,11 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "proprietary", + "license_expression": "unknown", "declared_license": "proprietary", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -309,9 +309,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/integration-hub", "repository_homepage_url": "https://packagist.org/packages/integration-hub", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/integration-hub.json" + "api_data_url": "https://packagist.org/p/packages/integration-hub.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/integration-hub" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/phpcomposer/slim/composer.json.expected b/tests/packagedcode/data/phpcomposer/slim/composer.json.expected index d11f1eb873b..72615557722 100644 --- a/tests/packagedcode/data/phpcomposer/slim/composer.json.expected +++ b/tests/packagedcode/data/phpcomposer/slim/composer.json.expected @@ -61,8 +61,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -138,9 +138,10 @@ "resolved_package": {} } ], - "purl": "pkg:composer/slim/slim", "repository_homepage_url": "https://packagist.org/packages/slim/slim", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/slim/slim.json" + "api_data_url": "https://packagist.org/p/packages/slim/slim.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/slim/slim" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_phpcomposer.py b/tests/packagedcode/test_phpcomposer.py index f43a012427b..4de0e451ec6 100644 --- a/tests/packagedcode/test_phpcomposer.py +++ b/tests/packagedcode/test_phpcomposer.py @@ -39,50 +39,50 @@ def test_parse_person(self): def test_is_manifest_php_composer_json(self): test_file = self.get_test_loc('phpcomposer/a-timer/composer.json') - assert phpcomposer.ComposerJson.is_package_data_file(test_file) + assert phpcomposer.PhpComposerJsonHandler.is_datafile(test_file) def test_parse_atimer(self): test_file = self.get_test_loc('phpcomposer/a-timer/composer.json') expected_loc = self.get_test_loc('phpcomposer/a-timer/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_framework(self): test_file = self.get_test_loc('phpcomposer/framework/composer.json') expected_loc = self.get_test_loc('phpcomposer/framework/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_slim(self): test_file = self.get_test_loc('phpcomposer/slim/composer.json') expected_loc = self.get_test_loc('phpcomposer/slim/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_modern(self): test_file = self.get_test_loc('phpcomposer/modern/composer.json') expected_loc = self.get_test_loc('phpcomposer/modern/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_fake_license1(self): test_file = self.get_test_loc('phpcomposer/fake/composer.json') expected_loc = self.get_test_loc('phpcomposer/fake/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_fake_license2(self): test_file = self.get_test_loc('phpcomposer/fake2/composer.json') expected_loc = self.get_test_loc('phpcomposer/fake2/composer.json.expected') - packages = phpcomposer.ComposerJson.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) def test_is_manifest_php_composer_lock(self): test_file = self.get_test_loc('phpcomposer/composer.lock') - assert phpcomposer.ComposerLock.is_package_data_file(test_file) + assert phpcomposer.PhpComposerLockHandler.is_datafile(test_file) def test_parse_composer_lock(self): test_file = self.get_test_loc('phpcomposer/composer.lock') expected_loc = self.get_test_loc('phpcomposer/composer.lock-expected.json') - packages = phpcomposer.ComposerLock.recognize(test_file) - self.check_packages(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + packages = phpcomposer.PhpComposerLockHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) From 1af56487ab9aa510bf9e3a0c50f8a7a1169daeea Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:21:49 +0200 Subject: [PATCH 28/36] Adopt new handler design for RPMs We now have these data file handlers: * RpmInstalledNdbDatabaseHandler * RpmInstalledSqliteDatabaseHandler * RpmInstalledBdbDatabaseHandler * RpmSpecfileHandler * RpmArchiveHandler And we assemble these in Packages correctly. Signed-off-by: Philippe Ombredanne --- src/packagedcode/pyrpm.py | 106 +- src/packagedcode/rpm.py | 276 +++- src/packagedcode/rpm_installed.py | 252 +++- .../centos-8-rpms.xmlish-expected.json | 93 +- .../fc33-rpms.xmlish-expected.json | 105 +- .../openmandriva-rpms.xmlish-expected.json | 651 ++++---- .../opensuse-rpms.xmlish-expected.json | 65 +- .../rhel-rpms.xmlish-expected.json | 1340 ++++++++++------- .../data/rpm_installed/rootfs/Packages | Bin 0 -> 4575232 bytes .../xmlish/centos-5-rpms.xmlish-expected.json | 114 +- ...s-5-rpms.xmlish-with-license-expected.json | 110 +- tests/packagedcode/test_pyrpm.py | 1 + tests/packagedcode/test_rpm.py | 12 +- tests/packagedcode/test_rpm_installed.py | 34 +- 14 files changed, 1939 insertions(+), 1220 deletions(-) create mode 100755 tests/packagedcode/data/rpm_installed/rootfs/Packages diff --git a/src/packagedcode/pyrpm.py b/src/packagedcode/pyrpm.py index 6045ef5b6ab..0d7631afddc 100644 --- a/src/packagedcode/pyrpm.py +++ b/src/packagedcode/pyrpm.py @@ -31,11 +31,9 @@ This is heavily modified version from the original. """ - from io import BytesIO import struct - """"" RPM constants From rpm.org lib/rpmtag.h @@ -96,6 +94,7 @@ ) # tags to collect +# see https://rpm-software-management.github.io/rpm/manual/tags.html RPMTAG_NAME = 1000 RPMTAG_VERSION = 1001 @@ -103,21 +102,107 @@ RPMTAG_EPOCH = 1003 RPMTAG_SUMMARY = 1004 RPMTAG_DESCRIPTION = 1005 + +# Distribution name RPMTAG_DISTRIBUTION = 1010 + RPMTAG_VENDOR = 1011 RPMTAG_COPYRIGHT = 1014 RPMTAG_LICENSE = 1014 RPMTAG_PACKAGER = 1015 RPMTAG_GROUP = 1016 + RPMTAG_PATCH = 1019 + +# Package URL, typically project upstream website. RPMTAG_URL = 1020 +# Package source code VCS location. rarely seen +RPMTAG_VCS = 5034 + RPMTAG_OS = 1021 RPMTAG_ARCH = 1022 + +RPMTAG_CHANGELOG = 1017 +RPMTAG_CHANGELOGTIME = 1080 +RPMTAG_CHANGELOGNAME = 1081 +RPMTAG_CHANGELOGTEXT = 1082 + +# A list of source archive names as in strace-4.24.tar.xz +RPMTAG_SOURCE = 1018 +# the full RPM archive file name for the source package of a binary RPM RPMTAG_SOURCERPM = 1044 -# a number ... not clear what it is +# integer set to 1 for source RPMs RPMTAG_SOURCEPACKAGE = 1106 + +# URL to a package bug tracker +RPMTAG_BUGURL = 5012 + +RPMTAG_FILESIZES = 1028 +RPMTAG_FILEDIGESTS = 1035 + +# ID of file digest algorithm. +# MD5: 0 (default if missing) +# SHA1: 2 +# SHA256: 8 +# SHA384: 9 +# SHA512: 10 +RPMTAG_FILEDIGESTALGO = 5011 + +RPMTAG_FILELINKTOS = 1036 +# File virtual attributes (doc, license, ghost, artifact etc) +# doc:2, license:128, 0 is most common +RPMTAG_FILEFLAGS = 1037 + +RPMTAG_DIRINDEXES = 1116 +RPMTAG_BASENAMES = 1117 +RPMTAG_DIRNAMES = 1118 +# is zero unless this is a special/char device file +RPMTAG_FILERDEVS = 1033 + +# File “color” - 1 for 32bit ELF, 2 for 64bit ELF and 0 otherwise +RPMTAG_FILECOLORS = 1140 + +# Original file paths for relocated packages only +# same design as RPMTAG_DIRINDEXES et al. +RPMTAG_ORIGDIRINDEXES = 1119 +RPMTAG_ORIGBASENAMES = 1120 +RPMTAG_ORIGDIRNAMES = 1121 + +RPMTAG_PROVIDES = 1047 +RPMTAG_PROVIDEFLAGS = 1112 +RPMTAG_PROVIDEVERSION = 1113 + +RPMTAG_REQUIRES = 1049 +RPMTAG_REQUIREFLAGS = 1048 +RPMTAG_REQUIREVERSION = 1050 + +RPMTAG_CONFLICTS = 1054 +RPMTAG_CONFLICTFLAGS = 1053 +RPMTAG_CONFLICTVERSION = 1055 + +RPMTAG_OBSOLETES = 1090 +RPMTAG_OBSOLETEFLAGS = 1114 +RPMTAG_OBSOLETEVERSION = 1115 + +# Distribution specific URL of the package. Seen only in Suse with obs:// links RPMTAG_DISTURL = 1123 +# Distribution acronym: never seen in practice +RPMTAG_DISTTAG = 1155 + +# Package platform (arch-os-vendor) as in x86_64-suse-linux or x86_64-redhat-linux-gnu +RPMTAG_PLATFORM = 1132 + +# an index for each file to RPMTAG_CLASSDICT +RPMTAG_FILECLASS = 1141 +# a "file" libmagic filetype +RPMTAG_CLASSDICT = 1142 + +# Payload format (cpio) +RPMTAG_PAYLOADFORMAT = 1124 +# Payload compressor name (as passed to rpmio Fopen()): for instance: gzip +RPMTAG_PAYLOADCOMPRESSOR = 1125 + RPMTAGS = { RPMTAG_NAME: 'name', RPMTAG_EPOCH: 'epoch', @@ -136,6 +221,7 @@ RPMTAG_ARCH: 'arch', RPMTAG_SOURCERPM: 'source_rpm', RPMTAG_DISTURL: 'dist_url', + RPMTAG_FILEDIGESTALGO: 'files_digest_algo', } @@ -161,6 +247,7 @@ class Entry(object): """ RPM Header Entry """ + def __init__(self, tag, type, value): # NOQA self.tag = tag self.type = type @@ -294,7 +381,7 @@ class RPMError(BaseException): pass -class RPM(object): +class RPM: def __init__(self, rpm): """ @@ -421,7 +508,7 @@ def name(self): @property def epoch(self): """ - Return a epoch or None for the epoch 0 and if no epoch is defined. + Return an epoch or None for the epoch 0 and if no epoch is defined. """ epoch = self.get_entry_value(RPMTAG_EPOCH) if not epoch: @@ -434,7 +521,7 @@ def epoch(self): return if epoch.lower() == 'none': return - return epoch or None + return epoch @property def version(self): @@ -501,6 +588,10 @@ def source_rpm(self): def package(self): return '-'.join([self.name, self.version]) + @property + def files_digest_algo(self): + return self.get_entry_value(RPMTAG_FILEDIGESTALGO) + @property def filename(self): name = '-'.join([self.package, self.release]) @@ -542,4 +633,5 @@ def to_dict(self): dist_url=self.dist_url, source_rpm=self.source_rpm, is_binary=self.is_binary, - ) \ No newline at end of file + files_digest_algo=self.files_digest_algo, + ) diff --git a/src/packagedcode/rpm.py b/src/packagedcode/rpm.py index 165052ea20d..e719d11b150 100644 --- a/src/packagedcode/rpm.py +++ b/src/packagedcode/rpm.py @@ -6,22 +6,21 @@ # See https://github.com/nexB/scancode-toolkit for support or download. # See https://aboutcode.org for more information about nexB OSS projects. # -# https://github.com/rpminspect/rpminspect-data-fedora/blob/master/licenses/fedora.json -from collections import namedtuple + import logging import os import sys +from collections import namedtuple +from pathlib import Path -import attr from license_expression import Licensing -from commoncode import filetype from packagedcode import models from packagedcode import nevra +from packagedcode import rpm_installed from packagedcode.pyrpm import RPM from packagedcode.utils import build_description -from packagedcode import rpm_installed -import typecode.contenttype +from packagedcode.utils import get_ancestor TRACE = False @@ -39,12 +38,19 @@ def logger_debug(*args): def logger_debug(*args): return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) +""" +Support for RPMs, installed databases and spec files. +""" # TODO: retrieve dependencies # TODO: parse spec files see: # http://www.faqs.org/docs/artu/ch05s02.html#id2906931%29.) # http://code.activestate.com/recipes/436229-record-jar-parser/ +# TODO: license and docs are typically at usr/share/doc/packages//* and should be used +# packages_doc_dir = os.path.join(root_dir, 'usr/share/doc/packages') +# note that we also have file flags that can tell us which file is a license and doc. + RPM_TAGS = ( 'name', 'epoch', @@ -87,22 +93,24 @@ class EVR(namedtuple('EVR', 'epoch version release')): The RPM Epoch, Version, Release tuple. """ - # note: the order of the named tuple is the sort order. - # But for creation we put the rarely used epoch last def __new__(self, version, release=None, epoch=None): + """ + note: the sort order of the named tuple is the sort order. + But for creation we put the rarely used epoch last with a default to None. + """ if epoch and epoch.strip() and not epoch.isdigit(): raise ValueError('Invalid epoch: must be a number or empty.') if not version: raise ValueError('Version is required: {}'.format(repr(version))) - return super(EVR, self).__new__(EVR, epoch, version, release) + return super().__new__(EVR, epoch, version, release) def __str__(self, *args, **kwargs): return self.to_string() def to_string(self): if self.release: - vr = '-'.join([self.version, self.release]) + vr = f'{self.version}-{self.release}' else: vr = self.version @@ -111,73 +119,168 @@ def to_string(self): return vr -@attr.s() -class RpmPackageData(models.PackageData): - - filetypes = ('rpm ',) - mimetypes = ('application/x-rpm',) - - default_type = 'rpm' +# TODO: add dependencies!!! +class BaseRpmInstalledDatabaseHandler(models.DatafileHandler): - default_web_baseurl = None - default_download_baseurl = None - default_api_baseurl = None + @classmethod + def parse(cls, location): + # dump and parse the rpmdb to XMLish + xmlish_loc = rpm_installed.collect_installed_rpmdb_xmlish_from_rpmdb_loc(location) + package_data = rpm_installed.parse_rpm_xmlish( + location=xmlish_loc, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + # TODO: package_data.namespace = cls.default_package_namespace + return package_data - def compute_normalized_license(self): - _declared, detected = detect_declared_license(self.declared_license) + @classmethod + def compute_normalized_license(cls, package): + _declared, detected = detect_declared_license(package.declared_license) return detected - def to_dict(self, _detailed=False, **kwargs): - data = models.PackageData.to_dict(self, **kwargs) - if _detailed: - ################################################# - data['installed_files'] = [istf.to_dict() for istf in (self.installed_files or [])] - ################################################# - else: - ################################################# - # remove temporary fields - data.pop('installed_files', None) - ################################################# - return data + @classmethod + def assemble(cls, package_data, resource, codebase): + # get the root resource of the rootfs + # take the 1st pattern as a reference + base_path_patterns = cls.path_patterns[0] + levels_up = len(base_path_patterns.split('/')) + root_resource = get_ancestor( + levels_up=levels_up, + resource=resource, + codebase=codebase, + ) + package = models.Package.from_package_data( + package_data=package_data, + datafile_path=resource.path, + ) + package_uid = package.package_uid + + # get etc/os-release for namespace + namespace = None + os_release_paths = ('etc/os-release', 'usr/lib/os-release',) + for res in root_resource.walk(codebase): + if res.path.endswith(os_release_paths): + # there can be only one distro + distro = res.package_data and res.package_data[0] + if distro: + namespace = distro.namespace + break + + package.namespace = namespace + + # detect license + _declared, detected = detect_declared_license(package.declared_license) + package.license_expression = detected + + # yield deps + dependent_packages = package_data.dependencies + if dependent_packages: + for dep in models.Dependency.from_dependent_packages( + dependent_packages=dependent_packages, + datafile_path=resource.path, + datasource_id=package_data.datasource_id, + package_uid=package_uid, + ): + if not dep.namespace: + dep.namespace = namespace + yield dep + + # tag files from refs + root_path = Path(root_resource.path) + # a file ref extends from the root of the filesystem + file_references_by_path = { + str(root_path / ref.path): ref + for ref in package.file_references + } + + for res in root_resource.walk(codebase): + ref = file_references_by_path.get(res.path) + if not ref: + continue -def get_installed_packages(root_dir, detect_licenses=False, **kwargs): - """ - Yield Package objects given a ``root_dir`` rootfs directory. - """ + # path is found and processed: remove it, so we can check if we + # found all of them + del file_references_by_path[res.path] + res.for_packages.append(package_uid) + res.save(codebase) - # TODO: license and docs are typically at usr/share/doc/packages//* and should be used - # packages_doc_dir = os.path.join(root_dir, 'usr/share/doc/packages') - # note that we also have file flags that can tell us which file is a license and doc. + yield res - # dump the rpmdb to XMLish - xmlish_loc = rpm_installed.collPackageDataWithect_installed_rpmdb_xmlish_from_rootfs(root_dir) - return rpm_installed.parse_rpm_xmlish(xmlish_loc, detect_licenses=detect_licenses) + # if we have left over file references, add these to extra data + if file_references_by_path: + missing = sorted(file_references_by_path.values(), key=lambda r:r.path) + package.extra_data['missing_file_references'] = missing + yield package -@attr.s() -class RpmManifest(RpmPackageData, models.PackageDataFile): - file_patterns = ('*.spec',) - extensions = ('.rpm', '.srpm', '.mvl', '.vip',) +# TODO: add dependencies!!! +class RpmInstalledNdbDatabaseHandler(BaseRpmInstalledDatabaseHandler): + # used by recent Suse + datasource_id = 'rpm_installed_database_ndb' + path_patterns = ('*usr/lib/sysimage/rpm/Packages.db',) + default_package_type = 'rpm' + default_package_namespace = 'TBD' + description = 'RPM installed package NDB database' + documentation_url = 'https://fedoraproject.org/wiki/Changes/NewRpmDBFormat' + + +# TODO: add dependencies!!! +class RpmInstalledSqliteDatabaseHandler(BaseRpmInstalledDatabaseHandler): + # used by newer RHEL/CentOS/Fedora + datasource_id = 'rpm_installed_database_sqlite' + path_patterns = ('*var/lib/rpm/rpmdb.sqlite',) + filetypes = ('berkeley',) + default_package_type = 'rpm' + default_package_namespace = 'TBD' + description = 'RPM installed package SQLite database' + documentation_url = 'https://fedoraproject.org/wiki/Changes/Sqlite_Rpmdb' + + +# TODO: add dependencies!!! +class RpmInstalledBdbDatabaseHandler(BaseRpmInstalledDatabaseHandler): + # used by legacy RHEL/CentOS/Fedora/Suse + datasource_id = 'rpm_installed_database_bdb' + path_patterns = ('*var/lib/rpm/Packages',) + filetypes = ('berkeley',) + default_package_type = 'rpm' + default_package_namespace = 'TBD' + description = 'RPM installed package BDB database' + documentation_url = 'https://man7.org/linux/man-pages/man8/rpmdb.8.html' + + +# TODO: implement me!!@ +class RpmSpecfileHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'rpm_spefile' + path_patterns = ('*.spec',) + default_package_type = 'rpm' + default_package_namespace = 'TBD' + description = 'RPM specfile' + documentation_url = 'https://en.wikipedia.org/wiki/RPM_Package_Manager' + + +# TODO: add dependencies!!! +class RpmArchiveHandler(models.DatafileHandler): + datasource_id = 'rpm_archive' + path_patterns = ('*.rpm', '*.src.rpm', '*.srpm', '*.mvl', '*.vip',) + filetypes = ('rpm',) + default_package_type = 'rpm' + default_package_namespace = 'TBD' + description = 'RPM package archive' + documentation_url = 'https://en.wikipedia.org/wiki/RPM_Package_Manager' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - T = typecode.contenttype.get_type(location) - return (filetype.is_file(location) and 'rpm' in T.filetype_file.lower()) + def compute_normalized_license(cls, package): + _declared, detected = detect_declared_license(package.declared_license) + return detected @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): rpm_tags = get_rpm_tags(location, include_desc=True) - if TRACE: logger_debug('build_from_tags: rpm_tags', rpm_tags) + if TRACE: logger_debug('recognize: rpm_tags', rpm_tags) if not rpm_tags: return @@ -211,19 +314,20 @@ def recognize(cls, location): src_qualifiers['arch'] = sarch src_purl = models.PackageURL( - type=RpmPackageData.default_type, + type=cls.default_package_type, + # TODO: namespace=cls.default_package_namespace, name=sname, version=src_evr, qualifiers=src_qualifiers ).to_string() - if TRACE: logger_debug('build_from_tags: source_rpm', src_purl) + if TRACE: logger_debug('recognize: source_rpm', src_purl) source_packages = [src_purl] parties = [] # TODO: also use me to craft a namespace!!! - # TODO: assign a namepsace to Package URL based on distro names. + # TODO: assign a namespace to Package URL based on distro names. # CentOS # Fedora Project # OpenMandriva Lx @@ -236,7 +340,7 @@ def recognize(cls, location): if rpm_tags.vendor: parties.append(models.Party(name=rpm_tags.vendor, role='vendor')) - description = build_description(rpm_tags.summary, rpm_tags.description) + description = build_description(summary=rpm_tags.summary, description=rpm_tags.description) if TRACE: data = dict( @@ -248,9 +352,12 @@ def recognize(cls, location): declared_license=rpm_tags.license or None, source_packages=source_packages, ) - logger_debug('build_from_tags: data to create a package:\n', data) + logger_debug('recognize: data to create a package:\n', data) - package = cls( + package = models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + # TODO: namespace=cls.default_package_namespace, name=name, version=evr, description=description or None, @@ -261,28 +368,16 @@ def recognize(cls, location): ) if TRACE: - logger_debug('build_from_tags: created package:\n', package) + logger_debug('recognize: created package:\n', package) yield package - -@attr.s() -class RpmPackage(RpmPackageData, models.Package): - """ - A RPM Package that is created out of one/multiple RPM package - manifests. - """ - - @property - def manifests(self): - return [ - RpmManifest - ] - ############################################################################ # FIXME: this license detection code is mostly copied from debian_copyright.py and alpine.py +# See https://github.com/rpminspect/rpminspect-data-fedora/blob/master/licenses/fedora.json for some mapping ############################################################################ + def detect_declared_license(declared): """ Return a tuple of (declared license, detected license expression) from a @@ -352,3 +447,22 @@ def get_declared_to_detected(data_file=None): decl = decl.strip() _DECLARED_TO_DETECTED[decl] = detect return _DECLARED_TO_DETECTED + + +ALGO_BY_ID = { + None: 'md5', + 0: 'md5', + 2: 'sha1', + 8: 'sha256', + 9: 'sha384', + 10: 'sha512', +} + + +def get_digest_algo(rpm_tags): + """ + Return a string representing a digest algorightm given an ``rpm_tags`` + RPMtags object + """ + fda = rpm_tags.files_digest_algo + return ALGO_BY_ID.get(fda, 'md5',) diff --git a/src/packagedcode/rpm_installed.py b/src/packagedcode/rpm_installed.py index 33d519adc1a..990e11c023c 100644 --- a/src/packagedcode/rpm_installed.py +++ b/src/packagedcode/rpm_installed.py @@ -13,8 +13,8 @@ import sys import xmltodict - from commoncode import command + from packagedcode import models from textcode.analysis import as_unicode @@ -35,10 +35,10 @@ def logger_debug(*args): return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) -def parse_rpm_xmlish(location, detect_licenses=False): +def parse_rpm_xmlish(location, datasource_id, package_type): """ - Yield RpmPackage(s) from a RPM XML'ish file at `location`. This is a file - created with rpm and the xml query option. + Yield PackageData built from an RPM XML'ish file at ``location``. This is a file + created with the rpm CLI with the xml query option. """ if not location or not os.path.exists(location): return @@ -53,10 +53,11 @@ def parse_rpm_xmlish(location, detect_licenses=False): for rpm_raw_tags in collect_rpms(rpms): tags = collect_tags(rpm_raw_tags) - pkg = build_package(tags) - if detect_licenses: - pkg.license_expression = pkg.compute_normalized_license() - yield pkg + yield build_package( + rpm_tags=tags, + datasource_id=datasource_id, + package_type=package_type, + ) def collect_rpms(text): @@ -131,33 +132,46 @@ def collect_tags(raw_tags): yield name, value_type, value -def build_package(rpm_tags): +def build_package(rpm_tags, datasource_id, package_type, package_namespace=None): """ - Return an RpmPackage object from an `rpm_tags` iterable of (name, + Return a PackageData object from an ``rpm_tags`` iterable of (name, value_type, value) tuples. """ - # guard from circular import - from packagedcode.rpm import RpmPackageData # mapping of real Package field name -> value converted to expected format - converted = {} + converted = { + 'datasource_id': datasource_id, + 'type': package_type, + 'namespace': package_namespace + } + for name, value_type, value in rpm_tags: - handler = handler_by_name.get(name) + handler = RPM_TAG_HANDLER_BY_NAME.get(name) # FIXME: we need to handle EVRA correctly # TODO: add more fields - # TODO: mereg with tag handling in rpm.py + # TODO: merge with tag handling in rpm.py if handler: - handled = handler(value, **converted) + try: + handled = handler(value, **converted) + except Exception as e: + raise Exception(value, converted) from e converted.update(handled) - # construct the package: we ignore unknown as we added a few technical fields - package = RpmPackageData.create(**converted) - return package + package_data = models.PackageData.from_dict(converted) + + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) + + return package_data ################################################################################ # Each handler function accepts a value and returns a {name: value} mapping -# Note handlers MUST accept **kwargs as they also receive the current data -# being processed so far as a processed_data kwarg, but most do not use it +# and handlers MUST accept **kwargs as they also receive the whole current data +# being processed so far as kwargs. + +# TODO: process lists in a more explict way +# Most handler do not use it, but parallel list handlers (such as for files) use +# this to process such lists by accumulating data passed around def name_value_str_handler(name): @@ -177,44 +191,70 @@ def size_handler(value, **kwargs): def arch_handler(value, **kwargs): """ - Return a Package URL qualifier for the arch. + Return a Package URL qualifiers for the arch. """ - return {'qualifiers': 'arch={}'.format(value)} + # TODO: should arch={value} be rather a mapping of {arch: value} ? + return {'qualifiers': f'arch={value}'} def checksum_handler(value, **kwargs): """ - Return a list which contains the MD5 hash + Return a list which contains the a checksum hash. """ - return {'current_file': value} + return {'current_filerefs': value} -def dir_index_handler(value, current_file, **kwargs): +def dir_index_handler(value, **kwargs): """ - Return a list of tuples with (dirindexes, md5) + Return a list of tuples with (dirindexes, md5). """ - return {'current_file': list(zip(value, current_file))} + current_filerefs = kwargs.get('current_filerefs') + return {'current_filerefs': list(zip(value, current_filerefs))} -def basename_handler(value, current_file, **kwargs): +def basename_handler(value, **kwargs): """ - Return a list of tuples with (dirindexes, md5, basename) + Return a list of tuples with (dirindexes, md5, basename). """ data = [] - for index, file in enumerate(current_file): + + current_filerefs = kwargs.get('current_filerefs') or [] + for index, file in enumerate(current_filerefs): basename = (value[index],) data.append(file + basename) - return {'current_file': data} + return {'current_filerefs': data} -def dirname_handler(value, current_file, **kwargs): +ALGO_BY_HEX_LEN = { + 32: 'md5', + 40: 'sha1', + 64: 'sha256', + 96: 'sha384', + 128: 'sha512', +} + + +def infer_digest_algo(digest): + """ + Given a ``digest`` string, return an inferred digest algorightm. + + We assume hex encoding for now (base64 with or without padding is common these days) + + For example: + >>> assert infer_digest_algo('acd15e34cce4a29542d98007c7eff6ee') == 'md5' """ - Update the current_file by adding the correct dir and basename - along with the md5 value. Add to installed_files + return digest and ALGO_BY_HEX_LEN.get(len(digest)) + + +def dirname_handler(value, **kwargs): """ - installed_files = [] - for file in current_file: - dirindexes, md5, basename = file + Return a mapping of {'file_references': }. + Update the ``current_filerefs`` found in `kwargs` by adding the correct dir, + basename and checksum value. + """ + file_references = [] + current_filerefs = kwargs.get('current_filerefs') or [] + for dirindexes, checksum, basename in current_filerefs: dirname = value[int(dirindexes)] # TODO: review this. Empty filename does not make sense, unless these # are directories that we might ignore OK. @@ -226,19 +266,27 @@ def dirname_handler(value, current_file, **kwargs): if basename == None: basename = '' - rpm_file = models.PackageFile( + file_reference = models.FileReference( path=posixpath.join(dirname, basename), - md5=md5, + # TODO: add size and fileclass as extra data ) - installed_files.append(rpm_file) - return {'installed_files': installed_files} + # TODO: we could/should use instead the filedigestalgo RPM tag + algo = infer_digest_algo(checksum) + if algo: + setattr(file_reference, algo, checksum) + file_references.append(file_reference) + + return {'file_references': [fr.to_dict() for fr in file_references]} + +# +# Mapping of: +# - the package field name in the installed db XMLis dump, +# - an handler function/callable for this field that implies also a target +# PackageData field name -# mapping of: -# - the package field one letter name in the installed db, -# - an handler for that field -handler_by_name = { +RPM_TAG_HANDLER_BY_NAME = { ############################################################################ # per-package fields @@ -247,7 +295,7 @@ def dirname_handler(value, current_file, **kwargs): 'Name': name_value_str_handler('name'), # TODO: add these # 'Epoch' - # 'Release' + # 'Release' 11.3.2 'Version': name_value_str_handler('version'), 'Description': name_value_str_handler('description'), 'Sha1header': name_value_str_handler('sha1'), @@ -256,38 +304,101 @@ def dirname_handler(value, current_file, **kwargs): 'Arch': arch_handler, 'Size': size_handler, + # TODO: + # 'Summary' to combine with description! + + # 'Distribution' + # SUSE Linux Enterprise 15 + # Mariner + # (not on Centos 5/6/7) + # CentOS (in CentOS 8) + # Fedora Project + + # 'Vendor' + # SUSE LLC <https://www.suse.com/> + # CentOS + + # 'Packager' + # https://www.suse.com/ + # CentOS BuildSystem <http://bugs.centos.org> + + # 'Group' System/Fhs --> keywords + # 'Os' linux + # 'Platform' noarch-suse-linux + # 'Sourcerpm' system-user-root-20190513-3.3.1.src.rpm + # 'Disturl' in Suse: obs://build.suse.de/SUSE:Maintenance:11304/ + # SUSE_SLE-15_Update/04b28aa8ff6101d2615ad6d102b6f09b-system-user-root.SUSE_SLE-15_Update + + ############################################################################ + # dependency fields + ############################################################################ + # 'Requirename' rpmlib(BuiltinLuaScripts) + # rpmlib(CompressedFileNames) + # 'Requireversion' 4.2.2-1 + # 3.0.4-1 + # 'Requireflags' + + # 'Providename' group(root) + # group(shadow) + # 'Provideversion' + # 20190513-3.3.1 + # 'Provideflags' + + # 'Conflictflags' + # 'Conflictname' + # 'Conflictversion' + + # 'Obsoleteflags' + # 'Obsoletename' + # 'Obsoleteversion' + ############################################################################ # per-file fields ############################################################################ # TODO: these two are needed: - # 'Fileflags' -> contains if a file is doc or license # 'Filesizes' -> useful info + # 'Filelinktos' -> links! + + # 'Fileflags' -> contains if a file is doc or license + # + # 0 libpopt.so.0 + # 0 libpopt.so.0.0.0 + # 0 popt + # 128 COPYING + # values: + # 128: license + # 2: documentation + # 0: regular file + + # 'Classdict' -> filetype from "file" libmagic for each file. The position is an index + # 'Fileclass' -> the position is a fileindex and the value is a classdict index + # + # libpopt.so.0 + # ELF 64-bit LSB .. libpopt.so.0.0.0 + # directory popt + # ASCII text COPYING - 'Filedigests': checksum_handler, 'Dirindexes': dir_index_handler, 'Basenames': basename_handler, 'Dirnames': dirname_handler, + + 'Filedigests': checksum_handler, + ############################################################################ ############################################################################ - # TODO: ignored per-package fields. from here on, these fields are not used yet + # TODO: ignored per-package fields. From here on, these fields are not used yet ############################################################################ # '(unknown)' # 'Archivesize' # 'Buildhost' # 'Buildtime' - # 'Changelogname' - # 'Changelogtext' - # 'Changelogtime' - # 'Classdict' - # 'Conflictflags' - # 'Conflictname' - # 'Conflictversion' + # 'Changelogname' fvogt@suse.com kukuk@suse.de + # 'Changelogtext' - Add some BuildIgnores for bootstrapping - Add group trusted [bsc#1044014] + # 'Changelogtime' 1557748800 1498046400 # 'Cookie' # 'Dependsdict' - # 'Distribution' # 'Dsaheader' - # 'Fileclass' # 'Filecolors' # 'Filecontexts' # 'Filedependsn' @@ -303,21 +414,14 @@ def dirname_handler(value, current_file, **kwargs): # 'Filestates' # 'Fileusername' # 'Fileverifyflags' - # 'Group' # 'Installcolor' # 'Installtid' # 'Installtime' # 'Instprefixes' - # 'Obsoleteflags' - # 'Obsoletename' - # 'Obsoleteversion' # 'Optflags' - # 'Os' - # 'Packager' # 'Payloadcompressor' # 'Payloadflags' # 'Payloadformat' - # 'Platform' # 'Postin' # 'Postinprog' # 'Postun' @@ -327,24 +431,15 @@ def dirname_handler(value, current_file, **kwargs): # 'Preinprog'] # 'Preun' # 'Preunprog' - # 'Provideflags' - # 'Providename' - # 'Provideversion' - # 'Requireflags' - # 'Requirename' - # 'Requireversion' - # 'Rpmversion' + # 'Rpmversion' 4.14.1 # 'Sigmd5' # 'Sigsize' - # 'Sourcerpm' - # 'Summary' # 'Triggerflags' # 'Triggerindex' # 'Triggername' # 'Triggerscriptprog' # 'Triggerscripts' # 'Triggerversion' - # 'Vendor' # 'Headeri18ntable' ############################################################################ @@ -452,7 +547,10 @@ def collect_installed_rpmdb_xmlish_from_rpmdb_loc(rpmdb_loc): with open(stderr_loc) as st: stde = st.read() full_cmd = ' '.join([cmd_loc] + args) - msg = f'collect_installed_rpmdb_xmlish_from_rpmdb_loc: Failed to execute RPM command: {full_cmd}\n{stde}' + msg = ( + f'collect_installed_rpmdb_xmlish_from_rpmdb_loc: ' + f'Failed to execute RPM command: {full_cmd}\n{stde}' + ) raise Exception(msg) return stdout_loc diff --git a/tests/packagedcode/data/rpm_installed/distro-xmlish/centos-8-rpms.xmlish-expected.json b/tests/packagedcode/data/rpm_installed/distro-xmlish/centos-8-rpms.xmlish-expected.json index 7d0830b9a61..04fb68323a4 100644 --- a/tests/packagedcode/data/rpm_installed/distro-xmlish/centos-8-rpms.xmlish-expected.json +++ b/tests/packagedcode/data/rpm_installed/distro-xmlish/centos-8-rpms.xmlish-expected.json @@ -27,29 +27,25 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/python3-setuptools-wheel@39.2.0?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/usr/share/licenses/python3-setuptools-wheel", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/python3-setuptools-wheel/LICENSE", "size": 0, "sha1": null, - "md5": "c32a3ac395af6321efd28be73d06a00f0db6ab887d1c21d4fec46128d2056d5a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c32a3ac395af6321efd28be73d06a00f0db6ab887d1c21d4fec46128d2056d5a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/python3-wheels", @@ -57,17 +53,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/python3-wheels/setuptools-39.2.0-py2.py3-none-any.whl", "size": 0, "sha1": null, - "md5": "938955c41e6dcc2e73ccaf51bd8f755c64df739929a4acff453fde2d0b921bb2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "938955c41e6dcc2e73ccaf51bd8f755c64df739929a4acff453fde2d0b921bb2", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/python3-setuptools-wheel@39.2.0?arch=noarch" }, { "type": "rpm", @@ -97,39 +102,43 @@ "license_expression": "gpl-2.0", "declared_license": "GPLv2", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/centos-gpg-keys@8.1?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/etc/pki/rpm-gpg", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial", "size": 0, "sha1": null, - "md5": "146059788b214d7ba0dd70c1cf21111e594c6cfde201da8a9a88fe7101be8a78", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "146059788b214d7ba0dd70c1cf21111e594c6cfde201da8a9a88fe7101be8a78", + "sha512": null, + "extra_data": {} }, { "path": "/etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting", "size": 0, "sha1": null, - "md5": "c9c03d66017969a4e7cc2378cac520d726d87e1f24422ec28a96065e43ce8c4a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c9c03d66017969a4e7cc2378cac520d726d87e1f24422ec28a96065e43ce8c4a", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/centos-gpg-keys@8.1?arch=noarch" }, { "type": "rpm", @@ -159,22 +168,24 @@ "license_expression": "gpl-2.0-plus", "declared_license": "GPLv2+", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/langpacks-en@1.0?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/o", "size": 0, "sha1": null, - "md5": "3", + "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/langpacks-en@1.0?arch=noarch" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rpm_installed/distro-xmlish/fc33-rpms.xmlish-expected.json b/tests/packagedcode/data/rpm_installed/distro-xmlish/fc33-rpms.xmlish-expected.json index f3912b71cd0..7e7377b4049 100644 --- a/tests/packagedcode/data/rpm_installed/distro-xmlish/fc33-rpms.xmlish-expected.json +++ b/tests/packagedcode/data/rpm_installed/distro-xmlish/fc33-rpms.xmlish-expected.json @@ -27,21 +27,16 @@ "license_expression": "(gpl-3.0-plus AND gpl-3.0-plus AND gpl-2.0-plus AND lgpl-2.0-plus) AND unknown", "declared_license": "GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/libgcc@10.1.1?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/lib64/libgcc_s-10-20200507.so.1", "size": 0, "sha1": null, - "md5": "f0983775e8e6b1d6bd76db2a9f52cde1d6198b115f4e44a6167a5cb8eb0e6235", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f0983775e8e6b1d6bd76db2a9f52cde1d6198b115f4e44a6167a5cb8eb0e6235", + "sha512": null, + "extra_data": {} }, { "path": "/lib64/libgcc_s.so.1", @@ -49,7 +44,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/lib/.build-id", @@ -57,7 +53,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/lib/.build-id/6c", @@ -65,7 +62,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/lib/.build-id/6c/87948c636ed6c91b75603625e32915177b72e9", @@ -73,7 +71,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc", @@ -81,49 +80,62 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc/COPYING", "size": 0, "sha1": null, - "md5": "231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "231f7edcc7352d7734a96eef0b8030f77982678c516876fcb81e25b32d68564c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc/COPYING.LIB", "size": 0, "sha1": null, - "md5": "32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc/COPYING.RUNTIME", "size": 0, "sha1": null, - "md5": "9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "9d6b43ce4d8de0c878bf16b54d8e7a10d9bd42b75178153e3af6a815bdc90f74", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc/COPYING3", "size": 0, "sha1": null, - "md5": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/libgcc/COPYING3.LIB", "size": 0, "sha1": null, - "md5": "a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a853c2ffec17057872340eee242ae4d96cbf2b520ae27d903e1b2fef1a5f9d1c", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/libgcc@10.1.1?arch=x86_64" }, { "type": "rpm", @@ -153,30 +165,33 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/fedora-release-identity-container@33?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/usr/lib/os-release", "size": 0, "sha1": null, - "md5": "e06cbdb1d9d52da73588f081b5dcf90fdf54e3abf60e4a07ec4e690639e4b982", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e06cbdb1d9d52da73588f081b5dcf90fdf54e3abf60e4a07ec4e690639e4b982", + "sha512": null, + "extra_data": {} }, { "path": "/usr/lib/swidtag/fedoraproject.org/org.fedoraproject.Fedora-edition.swidtag", "size": 0, "sha1": null, - "md5": "c389a9a15d21e774f6e621ba4e8236b6b8304305f7bd8b5aa3b74ccd147c2ae7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c389a9a15d21e774f6e621ba4e8236b6b8304305f7bd8b5aa3b74ccd147c2ae7", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/fedora-release-identity-container@33?arch=noarch" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rpm_installed/distro-xmlish/openmandriva-rpms.xmlish-expected.json b/tests/packagedcode/data/rpm_installed/distro-xmlish/openmandriva-rpms.xmlish-expected.json index 35f9214dbc1..d53a83763ea 100644 --- a/tests/packagedcode/data/rpm_installed/distro-xmlish/openmandriva-rpms.xmlish-expected.json +++ b/tests/packagedcode/data/rpm_installed/distro-xmlish/openmandriva-rpms.xmlish-expected.json @@ -27,21 +27,16 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/chkconfig@1.11?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/etc/alternatives", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/init.d", @@ -49,7 +44,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d", @@ -57,7 +53,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/init.d", @@ -65,7 +62,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc0.d", @@ -73,7 +71,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc1.d", @@ -81,7 +80,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc2.d", @@ -89,7 +89,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc3.d", @@ -97,7 +98,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc4.d", @@ -105,7 +107,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc5.d", @@ -113,7 +116,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/rc.d/rc6.d", @@ -121,7 +125,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/lib/systemd/systemd-sysv-install", @@ -129,7 +134,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/sbin/chkconfig", @@ -137,23 +143,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/sbin/alternatives", "size": 0, "sha1": null, - "md5": "50ccf901344d826de15cbe191c4cdc752e84d5ae9752b290556f61948eaaf7c7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "50ccf901344d826de15cbe191c4cdc752e84d5ae9752b290556f61948eaaf7c7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/sbin/chkconfig", "size": 0, "sha1": null, - "md5": "24bc8d5419bdc3f2854cac232e4997b1e157eb72af8ddebe555789772235aa78", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "24bc8d5419bdc3f2854cac232e4997b1e157eb72af8ddebe555789772235aa78", + "sha512": null, + "extra_data": {} }, { "path": "/usr/sbin/update-alternatives", @@ -161,623 +170,701 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ar/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "bb0f9a100149074b852a3cd9e0646c241ea92a4c5e337108feef5818a45bb854", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "bb0f9a100149074b852a3cd9e0646c241ea92a4c5e337108feef5818a45bb854", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/as/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "8bb77a5617dada2185f200e1e49ae9a8f2570e9394216c8edeb075ce1fad282c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8bb77a5617dada2185f200e1e49ae9a8f2570e9394216c8edeb075ce1fad282c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/bal/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "0690448d7b076a9c0ca2db46a99419dbf995f8fc839a9ae816b5471460ea4c83", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0690448d7b076a9c0ca2db46a99419dbf995f8fc839a9ae816b5471460ea4c83", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/be/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "b2dab4a2177c4d9fdc3ac245f94082e172be837336d65855de5a1692525e5098", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "b2dab4a2177c4d9fdc3ac245f94082e172be837336d65855de5a1692525e5098", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/bg/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "58dc1622c2f6eb27e38930ef71ae5bbfb7d8da58c3ce82e33d9053c7245916e7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "58dc1622c2f6eb27e38930ef71ae5bbfb7d8da58c3ce82e33d9053c7245916e7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/bn/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "c79f4effe4c6fc508a885d6d9022762f07771c5b747e69c521f46a14eac8f582", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c79f4effe4c6fc508a885d6d9022762f07771c5b747e69c521f46a14eac8f582", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/bn_IN/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "255207564629faae0f683900ead573259e82975121e505eceb18f0a97a71f486", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "255207564629faae0f683900ead573259e82975121e505eceb18f0a97a71f486", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/bs/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "09ccb784bdfb604f15c630a96558a3c5a23df9283514fdf7765526714d59c3ef", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "09ccb784bdfb604f15c630a96558a3c5a23df9283514fdf7765526714d59c3ef", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ca/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "adeef793bfff5ba10907745504bb9b605da4bc9a26c366eb5099b874076df6cf", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "adeef793bfff5ba10907745504bb9b605da4bc9a26c366eb5099b874076df6cf", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/cs/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "7c2dd83599819153119a7d7d347168966e0ffcc7896a6619dad13f502a53c312", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7c2dd83599819153119a7d7d347168966e0ffcc7896a6619dad13f502a53c312", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/cy/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "f4f43e3b963e62b0251e4127dd6a58641d8d89ad982ee7477d71ea79a801e941", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f4f43e3b963e62b0251e4127dd6a58641d8d89ad982ee7477d71ea79a801e941", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/da/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "bf3d31e8f8890ba41d0df97ea80708571faec84ef99ffc4eb6add7149a21831e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "bf3d31e8f8890ba41d0df97ea80708571faec84ef99ffc4eb6add7149a21831e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/de/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "5ba8a3de74e49406fb00ec8942794c26280d803c717b02d923ff55ee333c3c93", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5ba8a3de74e49406fb00ec8942794c26280d803c717b02d923ff55ee333c3c93", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/el/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "89967d3c650b03e53be965f675671572e80289603294d6589437e7dd61b2ebcc", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "89967d3c650b03e53be965f675671572e80289603294d6589437e7dd61b2ebcc", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/en_GB/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "047717ab293021c183b76feaf27e73008d52e210fd58652858fe2b90e28e862e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "047717ab293021c183b76feaf27e73008d52e210fd58652858fe2b90e28e862e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/es/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "6ffa3b9aca954c6068a60baed884d9244f15047128f64c6bfb1caa9ff7fe4bd3", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6ffa3b9aca954c6068a60baed884d9244f15047128f64c6bfb1caa9ff7fe4bd3", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/et/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "54112572cd84b066457ce2ea28288bae888192b951607cb2c9354fd8fc5d13f7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "54112572cd84b066457ce2ea28288bae888192b951607cb2c9354fd8fc5d13f7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/eu/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "cde24b32810142b7b8b366ae75064c8dc3639ddf31aa55e32218e9c7c2d19715", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "cde24b32810142b7b8b366ae75064c8dc3639ddf31aa55e32218e9c7c2d19715", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/fa/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "ec514eaa3a0429cbb0fb44ec6d3625a335bf3fc9cbfdea3eed42024043b784fd", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ec514eaa3a0429cbb0fb44ec6d3625a335bf3fc9cbfdea3eed42024043b784fd", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/fi/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d62e8a9a1ee77d9490178b958b817fc7d4222f41666bb867ba7f5608f474617b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d62e8a9a1ee77d9490178b958b817fc7d4222f41666bb867ba7f5608f474617b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/fr/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "03eeaf7920a06c34c73cdad4285b02aa5e5b2b4fcfa548008692c7bd551dfa67", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "03eeaf7920a06c34c73cdad4285b02aa5e5b2b4fcfa548008692c7bd551dfa67", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/gl/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "7d47bcb4732aea2293387d0aeea62386bcc66edd1c0f3841410ce7594de80dcb", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7d47bcb4732aea2293387d0aeea62386bcc66edd1c0f3841410ce7594de80dcb", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/gu/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d820bcc1c0cf80b5c671ae51250483171cfff50b763fe27066f52a5c40becfb2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d820bcc1c0cf80b5c671ae51250483171cfff50b763fe27066f52a5c40becfb2", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/he/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "8cd59fd02d83bf3093436c2cae19f4eeaa9f4742aa8ed28e4b541a2936a6407d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8cd59fd02d83bf3093436c2cae19f4eeaa9f4742aa8ed28e4b541a2936a6407d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/hi/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "cad764390e48748349b95a0df874d1c396e730ed6bf1174652d8a9bd0db7f70a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "cad764390e48748349b95a0df874d1c396e730ed6bf1174652d8a9bd0db7f70a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/hr/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "cda9c1e680c527753d168ea5948baa49c1ba46bbac1ca55f5c082a180649927b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "cda9c1e680c527753d168ea5948baa49c1ba46bbac1ca55f5c082a180649927b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/hu/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "0c62bd246c6ce4f5edc7b3cd9f584f452060e1cc7b0ae0d98a954670eab96194", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0c62bd246c6ce4f5edc7b3cd9f584f452060e1cc7b0ae0d98a954670eab96194", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/hy/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d3d76f7c7f9da30200fc695f23c8f862b142b5f6e01d3bc37d0f7b7e1e383aeb", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d3d76f7c7f9da30200fc695f23c8f862b142b5f6e01d3bc37d0f7b7e1e383aeb", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ia/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "155d52fa12a1f3faf9fb01d52092076f736e388402f5d75cbb842f29e7f4227c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "155d52fa12a1f3faf9fb01d52092076f736e388402f5d75cbb842f29e7f4227c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/id/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "e366957cf3af4c72a79b4f0da721e536b35df5f202252b344a8f211be2f8c6e8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e366957cf3af4c72a79b4f0da721e536b35df5f202252b344a8f211be2f8c6e8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/is/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "22a413cfcd310816331882b520469d1c656a723debbb3dec8847cca2e1ea14f9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "22a413cfcd310816331882b520469d1c656a723debbb3dec8847cca2e1ea14f9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/it/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "3b6dc7618882b412c246db2a45056950f36a12bd4858b58ca2f7bc53d60a6265", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3b6dc7618882b412c246db2a45056950f36a12bd4858b58ca2f7bc53d60a6265", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ja/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "bcb5934c2e0f63dd9f476c0549883ede310ff24c150c0a1ea93d41dee3b26749", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "bcb5934c2e0f63dd9f476c0549883ede310ff24c150c0a1ea93d41dee3b26749", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ka/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "e926c2d4285ef33a84b9914222368216aee52c180a657fe7d66e3428b9ffcae5", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e926c2d4285ef33a84b9914222368216aee52c180a657fe7d66e3428b9ffcae5", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/km/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d81ae8b8a0448c06eb9b8714bcc2e88aa9fe19ab2b064759f70c2160662ec1f7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d81ae8b8a0448c06eb9b8714bcc2e88aa9fe19ab2b064759f70c2160662ec1f7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/kn/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "74a0ee8fe1638bb3e1add576bffcc09223ea2e169f88dd437b53ce317877ccb8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "74a0ee8fe1638bb3e1add576bffcc09223ea2e169f88dd437b53ce317877ccb8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ko/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "1a025ce2a348503ab54822083a7a735c321447f3b9580b0db50e421bceb6ba85", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1a025ce2a348503ab54822083a7a735c321447f3b9580b0db50e421bceb6ba85", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ku/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "8eb18d07600b14e4ca4ebec48d00aef44ab3c28c69b450d8d7c2416a4d63cb2d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8eb18d07600b14e4ca4ebec48d00aef44ab3c28c69b450d8d7c2416a4d63cb2d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/lo/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "36c6d62a9074a1de5b19d3f45fdaa1eb7065104954ae4a1efd49ecdfaffe04b5", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "36c6d62a9074a1de5b19d3f45fdaa1eb7065104954ae4a1efd49ecdfaffe04b5", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/lv/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "6daf7fbbddbd90dfcaa8cb97a666662516ff763bf0fc82a39d41492e099db66a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6daf7fbbddbd90dfcaa8cb97a666662516ff763bf0fc82a39d41492e099db66a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/mai/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "6f691e64be81dfba2a36b39bde079a63077d600585d32d7900b01aa081de4f8b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6f691e64be81dfba2a36b39bde079a63077d600585d32d7900b01aa081de4f8b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/mk/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "818e6c6d5fd4b3fa6050770c9f85f117a506327a3bcc69fc8beb7ecf559df082", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "818e6c6d5fd4b3fa6050770c9f85f117a506327a3bcc69fc8beb7ecf559df082", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ml/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "10441504ba39278b15a761005e5f49eeb8b36b6ec2f092d64703369fed12dd2d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "10441504ba39278b15a761005e5f49eeb8b36b6ec2f092d64703369fed12dd2d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/mr/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "41fd54929eb1121c8c1e45842e92ba369044d04a952776c166f89eaa59abfab9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "41fd54929eb1121c8c1e45842e92ba369044d04a952776c166f89eaa59abfab9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ms/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "5890351c2896dd0c349cd479d5ae3af94d7418796e25946764f9968ddc779c0e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5890351c2896dd0c349cd479d5ae3af94d7418796e25946764f9968ddc779c0e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/my/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "99d006d7f5ec86751cc0fa27512d2e4a28f75d7a80c4f8bcafd15e6618e6df2e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "99d006d7f5ec86751cc0fa27512d2e4a28f75d7a80c4f8bcafd15e6618e6df2e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/nb/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d78cabb3afe05aa3f1ce1c4b3d4e79753d0a5661e7ca759370998e5c56166ec9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d78cabb3afe05aa3f1ce1c4b3d4e79753d0a5661e7ca759370998e5c56166ec9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/nds/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "19d706b2da02cf4bd15edb0c4c8810ccfc4bfa92b83976b8fe4299c94998dadb", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "19d706b2da02cf4bd15edb0c4c8810ccfc4bfa92b83976b8fe4299c94998dadb", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/nl/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "ce091ebc06cefc16466c033d524696a399b51af35edd144c23088456e62eccc4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ce091ebc06cefc16466c033d524696a399b51af35edd144c23088456e62eccc4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/nn/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "a7aff3772422604475c6e11d870d29b69600a0857f3f0ad8cbfc0ee8bdeba5d9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a7aff3772422604475c6e11d870d29b69600a0857f3f0ad8cbfc0ee8bdeba5d9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/or/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "a5659384bd30efd1909c37a480cba5e7e4b5dc111bea048774d15a597414eaaf", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a5659384bd30efd1909c37a480cba5e7e4b5dc111bea048774d15a597414eaaf", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/pa/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "ce594c7cb05e5efaf777399c94844ccf35b9256992493d979e879ed5bb8ed3fc", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ce594c7cb05e5efaf777399c94844ccf35b9256992493d979e879ed5bb8ed3fc", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/pl/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "5944a1cb201fb6f0c450b56f2b2489bde1c97d75f2c8c614f546e40e056824f0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5944a1cb201fb6f0c450b56f2b2489bde1c97d75f2c8c614f546e40e056824f0", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/pt/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "3fa3f5d5412a0abe37ea9645e1a7bcb9a39da0da2ba5115ec97bae4feae7b302", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3fa3f5d5412a0abe37ea9645e1a7bcb9a39da0da2ba5115ec97bae4feae7b302", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/pt_BR/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "d4d2c06fa475dc3d852e9f2f76fbc9ed3d565aa0cebccbd9bda530d63494a4af", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d4d2c06fa475dc3d852e9f2f76fbc9ed3d565aa0cebccbd9bda530d63494a4af", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ro/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "0efba2529a551f89d23dbaed44d8412a126bf13e209d489561e6ae37327f03fc", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0efba2529a551f89d23dbaed44d8412a126bf13e209d489561e6ae37327f03fc", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ru/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "edfb5d111f41692165bc35c255364e5635d335411db91ed0b9105856e3a4bf4a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "edfb5d111f41692165bc35c255364e5635d335411db91ed0b9105856e3a4bf4a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/si/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "28851725f7fa4ece33aaceffa8b1a9b99551174cbc2ea2e8f34d3e35a293d190", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "28851725f7fa4ece33aaceffa8b1a9b99551174cbc2ea2e8f34d3e35a293d190", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sk/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "ad56a33568c1c06ef3c86ebc9cb6ab8bc4bc45b432abfa0a50eba1cdf6d2edb7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ad56a33568c1c06ef3c86ebc9cb6ab8bc4bc45b432abfa0a50eba1cdf6d2edb7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sl/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "ea201fce2287bbd2ac0540c90516c1bd1a64b7ed7b520f801b5c90df6eef5fd8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ea201fce2287bbd2ac0540c90516c1bd1a64b7ed7b520f801b5c90df6eef5fd8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sq/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "e893e5a6ef4e514733c8ba6a71ab21dafecd8ed459aba6ffdc2f958d3a8ee70e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e893e5a6ef4e514733c8ba6a71ab21dafecd8ed459aba6ffdc2f958d3a8ee70e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sr/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "8db9fdb05219ed33094912501d1052ee56dc5960cc07adb2be6aa5ac282b8e64", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8db9fdb05219ed33094912501d1052ee56dc5960cc07adb2be6aa5ac282b8e64", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sr@latin/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "85a6e2fc8a67212f2965995af21b59ffaf7c6d2aab1a499b31487e2a871c007d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "85a6e2fc8a67212f2965995af21b59ffaf7c6d2aab1a499b31487e2a871c007d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/sv/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "eab29f7ef56781d98581f545e216a0f8a5bb894dc8adf48ebc6ba72f3ed1685a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "eab29f7ef56781d98581f545e216a0f8a5bb894dc8adf48ebc6ba72f3ed1685a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ta/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "91e09b855f3a9ea3b7bd81b0ec9907f6186c436869cbff5df3660b3b723d1c06", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "91e09b855f3a9ea3b7bd81b0ec9907f6186c436869cbff5df3660b3b723d1c06", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/te/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "1530e04f0f5b8e68a73f14c70bf4d2561ee29d8e1fa5d9291dcff156506f779e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1530e04f0f5b8e68a73f14c70bf4d2561ee29d8e1fa5d9291dcff156506f779e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/tg/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "68d10e9d28f91fc224d69de2989f0391c5bc8dba67def05722f1661a98e1101d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "68d10e9d28f91fc224d69de2989f0391c5bc8dba67def05722f1661a98e1101d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/th/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "1f6867604ad81b334ebc7255081e08e45f2fb906e577fa06d6d1e2eb08482d65", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1f6867604ad81b334ebc7255081e08e45f2fb906e577fa06d6d1e2eb08482d65", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/tr/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "8344dc87552381f8666545fa2cd8a0669712a816ee5a22d03a266a5ee4b5ce5f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8344dc87552381f8666545fa2cd8a0669712a816ee5a22d03a266a5ee4b5ce5f", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/uk/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "a1024bc9bc264d08cfc185be1a64cbbf56950abf3c6e22d6beef9078cd948347", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a1024bc9bc264d08cfc185be1a64cbbf56950abf3c6e22d6beef9078cd948347", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/ur/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "3812312eca29ea3edd13290729cbd3478a58d7f780534be82a90f947a342585b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3812312eca29ea3edd13290729cbd3478a58d7f780534be82a90f947a342585b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/vi/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "e99a0b495313afa649bcea5d97bc6afac0196f404d4fc2e375e32232accc0c00", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e99a0b495313afa649bcea5d97bc6afac0196f404d4fc2e375e32232accc0c00", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/zh_CN/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "6cac1bcc01fa77262c0acd5aa555df905894a862aec43c2a90d5da6329e0f51d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6cac1bcc01fa77262c0acd5aa555df905894a862aec43c2a90d5da6329e0f51d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/zh_TW.Big5/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "f482bb0dfbebb5e96cfeb366ee280b362b895e4a8345c96139432241eddf15f2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f482bb0dfbebb5e96cfeb366ee280b362b895e4a8345c96139432241eddf15f2", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/locale/zh_TW/LC_MESSAGES/chkconfig.mo", "size": 0, "sha1": null, - "md5": "21b7712ee97b120dc68e9dcda30686715b9cff716bab0a0112ac3a78bb287a7e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "21b7712ee97b120dc68e9dcda30686715b9cff716bab0a0112ac3a78bb287a7e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/man/man8/alternatives.8.zst", "size": 0, "sha1": null, - "md5": "13dffb5cab7d1edb171842abfb4f59fa2e5f920c91e8455f9d4466fc39c0a3a0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "13dffb5cab7d1edb171842abfb4f59fa2e5f920c91e8455f9d4466fc39c0a3a0", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/man/man8/chkconfig.8.zst", "size": 0, "sha1": null, - "md5": "a37c1ff33c7b5b17d7f927b911360495199dd30156820907b4389a550254eaec", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a37c1ff33c7b5b17d7f927b911360495199dd30156820907b4389a550254eaec", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/man/man8/update-alternatives.8.zst", @@ -785,7 +872,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/var/lib/alternatives", @@ -793,7 +881,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/var/log/update-alternatives.log", @@ -801,9 +890,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/chkconfig@1.11?arch=x86_64" }, { "type": "rpm", @@ -833,29 +930,25 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/lib64ncursesw6@6.2?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/lib64/libncursesw.so.6", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/lib64/libncursesw.so.6.2", "size": 0, "sha1": null, - "md5": "a8aea5ccc3098f9272fc9ca13c636adf5785e9da48aa257eba54ab8331fbdc1c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a8aea5ccc3098f9272fc9ca13c636adf5785e9da48aa257eba54ab8331fbdc1c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/lib64/libncursesw.so.6", @@ -863,8 +956,16 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/lib64ncursesw6@6.2?arch=x86_64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rpm_installed/distro-xmlish/opensuse-rpms.xmlish-expected.json b/tests/packagedcode/data/rpm_installed/distro-xmlish/opensuse-rpms.xmlish-expected.json index c966184374a..03f52dbfc67 100644 --- a/tests/packagedcode/data/rpm_installed/distro-xmlish/opensuse-rpms.xmlish-expected.json +++ b/tests/packagedcode/data/rpm_installed/distro-xmlish/opensuse-rpms.xmlish-expected.json @@ -27,31 +27,34 @@ "license_expression": "boost-1.0", "declared_license": "BSL-1.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/boost-license1_71_0@1.71.0?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/usr/share/licenses/boost-license1_71_0", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/boost-license1_71_0/LICENSE_1_0.txt", "size": 0, "sha1": null, - "md5": "c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/boost-license1_71_0@1.71.0?arch=noarch" }, { "type": "rpm", @@ -81,38 +84,42 @@ "license_expression": "lgpl-2.1", "declared_license": "LGPL-2.1", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/cracklib-dict-small@2.9.6?arch=x86_64", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/pw_dict.hwm", "size": 0, "sha1": null, - "md5": "6787c3ee0d1f03e47a6cfc6d639fb89575ef5e28bbb0c8b2ccdc2876b0713669", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6787c3ee0d1f03e47a6cfc6d639fb89575ef5e28bbb0c8b2ccdc2876b0713669", + "sha512": null, + "extra_data": {} }, { "path": "/pw_dict.pwd", "size": 0, "sha1": null, - "md5": "c5de5d3ab2fa1e8d1bec21ab2937dfff48e59493fc9af2d7835968516e1d1f68", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c5de5d3ab2fa1e8d1bec21ab2937dfff48e59493fc9af2d7835968516e1d1f68", + "sha512": null, + "extra_data": {} }, { "path": "/pw_dict.pwi", "size": 0, "sha1": null, - "md5": "7fabf3751149bae4104b400b916b674fac3749c138fec9e9a63cfe8bde6d6044", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7fabf3751149bae4104b400b916b674fac3749c138fec9e9a63cfe8bde6d6044", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/cracklib-dict-small@2.9.6?arch=x86_64" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rpm_installed/distro-xmlish/rhel-rpms.xmlish-expected.json b/tests/packagedcode/data/rpm_installed/distro-xmlish/rhel-rpms.xmlish-expected.json index 096573553b1..629522a0d87 100644 --- a/tests/packagedcode/data/rpm_installed/distro-xmlish/rhel-rpms.xmlish-expected.json +++ b/tests/packagedcode/data/rpm_installed/distro-xmlish/rhel-rpms.xmlish-expected.json @@ -27,77 +27,79 @@ "license_expression": "public-domain", "declared_license": "Public Domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/setup@2.12.2?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/etc/aliases", "size": 0, "sha1": null, - "md5": "918bb2cfd8ff417b9e78d220d37f34033258469545e49c19ef3ae4247d905dfb", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "918bb2cfd8ff417b9e78d220d37f34033258469545e49c19ef3ae4247d905dfb", + "sha512": null, + "extra_data": {} }, { "path": "/etc/bashrc", "size": 0, "sha1": null, - "md5": "36d3a2d655d6021795886a9a4949fbe224f07a1ffae098796c20ca81819d99a1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "36d3a2d655d6021795886a9a4949fbe224f07a1ffae098796c20ca81819d99a1", + "sha512": null, + "extra_data": {} }, { "path": "/etc/csh.cshrc", "size": 0, "sha1": null, - "md5": "fed16cef3a870b34429f9e3df7b54b7ffe19ed496c1361a122028ccae66acbf9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "fed16cef3a870b34429f9e3df7b54b7ffe19ed496c1361a122028ccae66acbf9", + "sha512": null, + "extra_data": {} }, { "path": "/etc/csh.login", "size": 0, "sha1": null, - "md5": "715653a95b3908b283ee0dcf36505a6564083b1efb452b5f870fb0650d9a9335", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "715653a95b3908b283ee0dcf36505a6564083b1efb452b5f870fb0650d9a9335", + "sha512": null, + "extra_data": {} }, { "path": "/etc/environment", "size": 0, "sha1": null, - "md5": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} }, { "path": "/etc/ethertypes", "size": 0, "sha1": null, - "md5": "ed38f9d644befc87eb41a8649c310073240d9a8cd75b2f9c115b5d9d7e5d033c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ed38f9d644befc87eb41a8649c310073240d9a8cd75b2f9c115b5d9d7e5d033c", + "sha512": null, + "extra_data": {} }, { "path": "/etc/exports", "size": 0, "sha1": null, - "md5": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} }, { "path": "/etc/filesystems", "size": 0, "sha1": null, - "md5": "ba1ed4fe76cd63c37dbd44a040921db7810c4b63f46ee6635779627a4a36a196", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ba1ed4fe76cd63c37dbd44a040921db7810c4b63f46ee6635779627a4a36a196", + "sha512": null, + "extra_data": {} }, { "path": "/etc/fstab", @@ -105,103 +107,116 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/group", "size": 0, "sha1": null, - "md5": "5be46faf83078411c18ce0f3cb5e5fc5b56b8cb214a7f5a65dbbef6cb8249e16", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5be46faf83078411c18ce0f3cb5e5fc5b56b8cb214a7f5a65dbbef6cb8249e16", + "sha512": null, + "extra_data": {} }, { "path": "/etc/gshadow", "size": 0, "sha1": null, - "md5": "50b56bf2e0d5dd28900aa04478a9d4cc2ca1ea3452a76a71c71b5ade7f2221cd", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "50b56bf2e0d5dd28900aa04478a9d4cc2ca1ea3452a76a71c71b5ade7f2221cd", + "sha512": null, + "extra_data": {} }, { "path": "/etc/host.conf", "size": 0, "sha1": null, - "md5": "380f5fe21d755923b44203b58ca3c8b9681c485d152bd5d7e3914f67d821d32a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "380f5fe21d755923b44203b58ca3c8b9681c485d152bd5d7e3914f67d821d32a", + "sha512": null, + "extra_data": {} }, { "path": "/etc/hosts", "size": 0, "sha1": null, - "md5": "498f494232085ec83303a2bc6f04bea840c2b210fbbeda31a46a6e5674d4fc0e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "498f494232085ec83303a2bc6f04bea840c2b210fbbeda31a46a6e5674d4fc0e", + "sha512": null, + "extra_data": {} }, { "path": "/etc/hosts.allow", "size": 0, "sha1": null, - "md5": "c9e9862bac9c369db2c15df33b60e7154040a8ae2931250fbd8fe931653b3e25", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c9e9862bac9c369db2c15df33b60e7154040a8ae2931250fbd8fe931653b3e25", + "sha512": null, + "extra_data": {} }, { "path": "/etc/hosts.deny", "size": 0, "sha1": null, - "md5": "8d2e1a14032131585dbc55ca1a63e756e366d723b82d8be8b0a82b2b915361c0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8d2e1a14032131585dbc55ca1a63e756e366d723b82d8be8b0a82b2b915361c0", + "sha512": null, + "extra_data": {} }, { "path": "/etc/inputrc", "size": 0, "sha1": null, - "md5": "3df12b75483c9019090f18bdf46c47399959eddc2b721cf9b563f4010a89a830", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3df12b75483c9019090f18bdf46c47399959eddc2b721cf9b563f4010a89a830", + "sha512": null, + "extra_data": {} }, { "path": "/etc/motd", "size": 0, "sha1": null, - "md5": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} }, { "path": "/etc/networks", "size": 0, "sha1": null, - "md5": "ae89ab2e35076a070ae7cf5b0edf600c3ea6999e15db9b543ef35dfc76d37cb1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ae89ab2e35076a070ae7cf5b0edf600c3ea6999e15db9b543ef35dfc76d37cb1", + "sha512": null, + "extra_data": {} }, { "path": "/etc/passwd", "size": 0, "sha1": null, - "md5": "d137fa8bf6ca9020c35a5bf992f32d4c803497e856e0254618f5abcb2f2425c6", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d137fa8bf6ca9020c35a5bf992f32d4c803497e856e0254618f5abcb2f2425c6", + "sha512": null, + "extra_data": {} }, { "path": "/etc/printcap", "size": 0, "sha1": null, - "md5": "f809352567a37d932b014311cf626774b97b63ec06d4f7bdd8a9cfcc34c691d9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f809352567a37d932b014311cf626774b97b63ec06d4f7bdd8a9cfcc34c691d9", + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile", "size": 0, "sha1": null, - "md5": "3c859bf49a804061290f8751c4bd14e18a94e1baa3c58dd028a31becccf6f4af", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3c859bf49a804061290f8751c4bd14e18a94e1baa3c58dd028a31becccf6f4af", + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile.d", @@ -209,87 +224,98 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile.d/csh.local", "size": 0, "sha1": null, - "md5": "07a2a80f1386c89941b3da4cda68790afe19f7425a14e01acdc2fbddb73b5508", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "07a2a80f1386c89941b3da4cda68790afe19f7425a14e01acdc2fbddb73b5508", + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile.d/lang.csh", "size": 0, "sha1": null, - "md5": "dee089f44e6deeda77ce016e480b137ba6b27aac2ff864769367c23dae186060", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "dee089f44e6deeda77ce016e480b137ba6b27aac2ff864769367c23dae186060", + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile.d/lang.sh", "size": 0, "sha1": null, - "md5": "0a976e5199cd34a2f07623c50411050e3ce53a6c85b9f0eb88f943562dfe7006", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0a976e5199cd34a2f07623c50411050e3ce53a6c85b9f0eb88f943562dfe7006", + "sha512": null, + "extra_data": {} }, { "path": "/etc/profile.d/sh.local", "size": 0, "sha1": null, - "md5": "3c5de252d65ae8c40e54c21be09dc574ca3641d036d7b44174939a7e64863920", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3c5de252d65ae8c40e54c21be09dc574ca3641d036d7b44174939a7e64863920", + "sha512": null, + "extra_data": {} }, { "path": "/etc/protocols", "size": 0, "sha1": null, - "md5": "d0e614d3ac7c6d9f6fe7b6c8ac678f26cca185de66f5dd34b56e634b2398a8cd", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d0e614d3ac7c6d9f6fe7b6c8ac678f26cca185de66f5dd34b56e634b2398a8cd", + "sha512": null, + "extra_data": {} }, { "path": "/etc/services", "size": 0, "sha1": null, - "md5": "400ccb27921dbd33a194a93cc49f6efe60aba2aafddfce8d8f6c0e0fea918081", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "400ccb27921dbd33a194a93cc49f6efe60aba2aafddfce8d8f6c0e0fea918081", + "sha512": null, + "extra_data": {} }, { "path": "/etc/shadow", "size": 0, "sha1": null, - "md5": "e76854ddd785355ba1e81317aea50a26e8223b3a17c10f8d417c44c64031d72f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e76854ddd785355ba1e81317aea50a26e8223b3a17c10f8d417c44c64031d72f", + "sha512": null, + "extra_data": {} }, { "path": "/etc/shells", "size": 0, "sha1": null, - "md5": "4ec4e8c524a4f10ca5898ccfaa6d29e7e08aff3a681f6bafbb62e7bec91aa154", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4ec4e8c524a4f10ca5898ccfaa6d29e7e08aff3a681f6bafbb62e7bec91aa154", + "sha512": null, + "extra_data": {} }, { "path": "/etc/subgid", "size": 0, "sha1": null, - "md5": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} }, { "path": "/etc/subuid", "size": 0, "sha1": null, - "md5": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/doc/setup", @@ -297,15 +323,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/doc/setup/uidgid", "size": 0, "sha1": null, - "md5": "dadbb7d0241ecabfe45c3559b5689eede341fd509a8ce46e41e15f7428c8e975", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "dadbb7d0241ecabfe45c3559b5689eede341fd509a8ce46e41e15f7428c8e975", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/setup", @@ -313,15 +341,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/setup/COPYING", "size": 0, "sha1": null, - "md5": "628095e1ef656bbe9034cf5bfa3c220880a16cd0ceea25b17cd2198ea3503e03", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "628095e1ef656bbe9034cf5bfa3c220880a16cd0ceea25b17cd2198ea3503e03", + "sha512": null, + "extra_data": {} }, { "path": "/var/log/lastlog", @@ -329,9 +359,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/setup@2.12.2?arch=noarch" }, { "type": "rpm", @@ -349,7 +387,7 @@ "keywords": [], "homepage_url": null, "download_url": null, - "size": 0, + "size": null, "sha1": "940517ba58cfdc477cab59936e03dea1c226e266", "md5": null, "sha256": null, @@ -361,14 +399,15 @@ "license_expression": "public-domain", "declared_license": "Public Domain", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, - "purl": "pkg:rpm/basesystem@11?arch=noarch", + "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null, - "installed_files": [] + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/basesystem@11?arch=noarch" }, { "type": "rpm", @@ -398,21 +437,16 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "purl": "pkg:rpm/ncurses-base@6.1?arch=noarch", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null, - "installed_files": [ + "file_references": [ { "path": "/etc/terminfo", "size": 0, "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/doc/ncurses-base", @@ -420,15 +454,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/doc/ncurses-base/README", "size": 0, "sha1": null, - "md5": "3c7bc1dd475a5e5dcc7bdf13268a0313ff69e3765689444eb95b5893f61b3d1e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3c7bc1dd475a5e5dcc7bdf13268a0313ff69e3765689444eb95b5893f61b3d1e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/ncurses-base", @@ -436,15 +472,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/licenses/ncurses-base/COPYING", "size": 0, "sha1": null, - "md5": "86106f0da1cf5ccfa0f0651665dd1b4515e8edad1c7972780155770548b317d9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "86106f0da1cf5ccfa0f0651665dd1b4515e8edad1c7972780155770548b317d9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/tabset", @@ -452,39 +490,44 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/tabset/std", "size": 0, "sha1": null, - "md5": "fbadb5f608b355fe481c0c7d9c6265b2372bfa35250662f81f68d46540080770", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "fbadb5f608b355fe481c0c7d9c6265b2372bfa35250662f81f68d46540080770", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/tabset/stdcrt", "size": 0, "sha1": null, - "md5": "cf6c37b18ceea7c306f7e3a5e604a03b0dfb9c22ec99163e4b52f885ce063145", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "cf6c37b18ceea7c306f7e3a5e604a03b0dfb9c22ec99163e4b52f885ce063145", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/tabset/vt100", "size": 0, "sha1": null, - "md5": "075251754239d9973945d82b95c18cd90997acd2017393e70c8832e9297de056", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "075251754239d9973945d82b95c18cd90997acd2017393e70c8832e9297de056", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/tabset/vt300", "size": 0, "sha1": null, - "md5": "61f8388cad6a381feb819bc6a8d299d06a853d15e1f4bfdfd6b6f40069ad4956", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "61f8388cad6a381feb819bc6a8d299d06a853d15e1f4bfdfd6b6f40069ad4956", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo", @@ -492,7 +535,8 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/A", @@ -500,15 +544,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/A/Apple_Terminal", "size": 0, "sha1": null, - "md5": "6bf12fa8e2596f3c60d54d74f8dcf8f1630baa174654136899b819d908bdbad8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6bf12fa8e2596f3c60d54d74f8dcf8f1630baa174654136899b819d908bdbad8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/E", @@ -516,39 +562,44 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/E/Eterm", "size": 0, "sha1": null, - "md5": "ec895a5f98e5f7f9b6be082689f7d81bc627c71dc826e30ac4f4276d9fd0df47", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ec895a5f98e5f7f9b6be082689f7d81bc627c71dc826e30ac4f4276d9fd0df47", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/E/Eterm-256color", "size": 0, "sha1": null, - "md5": "c5d5b1a94ae7f5dd893f8e7b3aea83e791fbfe0f5032f03ad7da2eceb48c3529", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c5d5b1a94ae7f5dd893f8e7b3aea83e791fbfe0f5032f03ad7da2eceb48c3529", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/E/Eterm-88color", "size": 0, "sha1": null, - "md5": "7f5508b34629f9757d8b8f72e19c1f2307c2d3e3c258f08a1ee0dd63d55a856c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7f5508b34629f9757d8b8f72e19c1f2307c2d3e3c258f08a1ee0dd63d55a856c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/E/Eterm-color", "size": 0, "sha1": null, - "md5": "ec895a5f98e5f7f9b6be082689f7d81bc627c71dc826e30ac4f4276d9fd0df47", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ec895a5f98e5f7f9b6be082689f7d81bc627c71dc826e30ac4f4276d9fd0df47", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/a", @@ -556,39 +607,44 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/a/ansi", "size": 0, "sha1": null, - "md5": "93ec8cb9beb0c898ebc7dda0f670de31addb605be9005735228680d592cff657", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "93ec8cb9beb0c898ebc7dda0f670de31addb605be9005735228680d592cff657", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/a/ansi80x25", "size": 0, "sha1": null, - "md5": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/a/ansis", "size": 0, "sha1": null, - "md5": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/a/aterm", "size": 0, "sha1": null, - "md5": "ba3149ceecc4682a8b9b62171939b869c2e8e0601942a642922f4b64cc0b5411", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ba3149ceecc4682a8b9b62171939b869c2e8e0601942a642922f4b64cc0b5411", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/b", @@ -596,15 +652,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/b/bterm", "size": 0, "sha1": null, - "md5": "b5166019760429c4d6150180f1c2dd81136488e21c36b564e605c9dc7366f1db", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "b5166019760429c4d6150180f1c2dd81136488e21c36b564e605c9dc7366f1db", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/c", @@ -612,23 +670,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/c/cons25", "size": 0, "sha1": null, - "md5": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "acd69b88fbc9045037b562dd67c876e88cc5d2616af20b9ca6c41d33ee335606", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/c/cygwin", "size": 0, "sha1": null, - "md5": "3e04bfdcc0764f4e28655701864845752cd3f77d0c52390637ebe588f91665cf", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3e04bfdcc0764f4e28655701864845752cd3f77d0c52390637ebe588f91665cf", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/d", @@ -636,15 +697,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/d/dumb", "size": 0, "sha1": null, - "md5": "123c85a2812a517d967db5f31660db0e6aded4a0b95ed943c5ab435368e7a25c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "123c85a2812a517d967db5f31660db0e6aded4a0b95ed943c5ab435368e7a25c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/e", @@ -652,23 +715,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/e/eterm", "size": 0, "sha1": null, - "md5": "c79a54efd731abe696b0373d814c9a67839eb74229cb0f63ec436b43871b8a2a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c79a54efd731abe696b0373d814c9a67839eb74229cb0f63ec436b43871b8a2a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/e/eterm-color", "size": 0, "sha1": null, - "md5": "718af703c538849e5b13ca124dc0416a60e05f1eed5208f6d72836c51c108f31", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "718af703c538849e5b13ca124dc0416a60e05f1eed5208f6d72836c51c108f31", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/g", @@ -676,23 +742,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/g/gnome", "size": 0, "sha1": null, - "md5": "e6d9c90d328d11542f2f28c05a33977fb822a5d72b51456d8b7e4091f37676c0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e6d9c90d328d11542f2f28c05a33977fb822a5d72b51456d8b7e4091f37676c0", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/g/gnome-256color", "size": 0, "sha1": null, - "md5": "8e7026ff5f02e68ea5bf7377a659215a21fbb70ebe3dc2908b4946938746db0c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8e7026ff5f02e68ea5bf7377a659215a21fbb70ebe3dc2908b4946938746db0c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/h", @@ -700,15 +769,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/h/hurd", "size": 0, "sha1": null, - "md5": "ea3517cda1607f3c65f58a746c524bced0a32aa3840e5751cdde267f15c07748", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ea3517cda1607f3c65f58a746c524bced0a32aa3840e5751cdde267f15c07748", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/j", @@ -716,15 +787,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/j/jfbterm", "size": 0, "sha1": null, - "md5": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/k", @@ -732,39 +805,44 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/k/kon", "size": 0, "sha1": null, - "md5": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/k/kon2", "size": 0, "sha1": null, - "md5": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c238f6378992e34dc9eef03f52b6efeb6b6d37a5042d4f1a5a1334b40e367735", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/k/konsole", "size": 0, "sha1": null, - "md5": "d54737abe9927dd7447b70d33a15a895339e796296fb6eabb53a5cdf95e28511", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d54737abe9927dd7447b70d33a15a895339e796296fb6eabb53a5cdf95e28511", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/k/konsole-256color", "size": 0, "sha1": null, - "md5": "8fb0d289deddb27a2f6e253527798d38a2e952fa4e293188e268aeffd6d271f7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8fb0d289deddb27a2f6e253527798d38a2e952fa4e293188e268aeffd6d271f7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/l", @@ -772,15 +850,17 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/l/linux", "size": 0, "sha1": null, - "md5": "4beebb2d5615856487c4a46d826c70c27b590ffc849744c1a06056ba2ba757a7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4beebb2d5615856487c4a46d826c70c27b590ffc849744c1a06056ba2ba757a7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m", @@ -788,63 +868,71 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mach", "size": 0, "sha1": null, - "md5": "ecd31c58040e5908eb434514e67620b2e4be538655126f427155760b273c7e9b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ecd31c58040e5908eb434514e67620b2e4be538655126f427155760b273c7e9b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mach-bold", "size": 0, "sha1": null, - "md5": "4e4400e3ad4df2dbbf90920860c540cd72552ca71a24b556a0b6ba62fa091b84", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4e4400e3ad4df2dbbf90920860c540cd72552ca71a24b556a0b6ba62fa091b84", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mach-color", "size": 0, "sha1": null, - "md5": "5caa825bd606e26c8b6c55a3206eccfea525e788f74da5e7cb48cc713db52239", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5caa825bd606e26c8b6c55a3206eccfea525e788f74da5e7cb48cc713db52239", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mach-gnu", "size": 0, "sha1": null, - "md5": "99372cd399478be723230692595362004df345dee6c4145e4d109113a2357717", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "99372cd399478be723230692595362004df345dee6c4145e4d109113a2357717", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mach-gnu-color", "size": 0, "sha1": null, - "md5": "e1c62541670d0e10fe46daabce8ce95d9fd77115a68106e5eb2c2a7647e40a13", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e1c62541670d0e10fe46daabce8ce95d9fd77115a68106e5eb2c2a7647e40a13", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mlterm", "size": 0, "sha1": null, - "md5": "84a72b515c64b2594914b7b90b082300467b3c815f4223b2dcaef789e4e46ed2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "84a72b515c64b2594914b7b90b082300467b3c815f4223b2dcaef789e4e46ed2", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/m/mrxvt", "size": 0, "sha1": null, - "md5": "d9ccb1774f5631d96af45db221fc6efb370d8ddc49baecd7bb217bab20573a32", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d9ccb1774f5631d96af45db221fc6efb370d8ddc49baecd7bb217bab20573a32", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/n", @@ -852,23 +940,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/n/nsterm", "size": 0, "sha1": null, - "md5": "6bf12fa8e2596f3c60d54d74f8dcf8f1630baa174654136899b819d908bdbad8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6bf12fa8e2596f3c60d54d74f8dcf8f1630baa174654136899b819d908bdbad8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/n/nxterm", "size": 0, "sha1": null, - "md5": "f74fe619914bfe650f6071bbbaf242c439de8a2f0ecefe9e80870216dfb844b4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f74fe619914bfe650f6071bbbaf242c439de8a2f0ecefe9e80870216dfb844b4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/p", @@ -876,31 +967,35 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/p/pcansi", "size": 0, "sha1": null, - "md5": "ecda9662049c96ee0a574f40cfb8950b0198b508b5b72a3de05774eb3cb3f34e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ecda9662049c96ee0a574f40cfb8950b0198b508b5b72a3de05774eb3cb3f34e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/p/putty", "size": 0, "sha1": null, - "md5": "9ae6e78233c431b1420f2decb2366bbd7aeca8a2114fe8fc8039cb5a0ab0d866", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "9ae6e78233c431b1420f2decb2366bbd7aeca8a2114fe8fc8039cb5a0ab0d866", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/p/putty-256color", "size": 0, "sha1": null, - "md5": "c4cac29cfa971a3ec4fabc789acb49d6abe64de8ba5c27e756d6d63c1dc84bf4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c4cac29cfa971a3ec4fabc789acb49d6abe64de8ba5c27e756d6d63c1dc84bf4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r", @@ -908,87 +1003,98 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt", "size": 0, "sha1": null, - "md5": "f33c1aa275fe5817678b61898573754d6b855607c291afe2f6795441097a6a3f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f33c1aa275fe5817678b61898573754d6b855607c291afe2f6795441097a6a3f", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-16color", "size": 0, "sha1": null, - "md5": "ab1a4668a6ffd1b4b01d4ef3a38e2f3cace3d40c1f1b60bdb7e1c2287d20c596", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ab1a4668a6ffd1b4b01d4ef3a38e2f3cace3d40c1f1b60bdb7e1c2287d20c596", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-256color", "size": 0, "sha1": null, - "md5": "bca06510856fe184904c21410b0c63c16972de9bdeb99c3e3c9299191878230e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "bca06510856fe184904c21410b0c63c16972de9bdeb99c3e3c9299191878230e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-88color", "size": 0, "sha1": null, - "md5": "091b08cab321b22dcee7aa80362e541122164716b9830874950b6b8c8ba6a7c4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "091b08cab321b22dcee7aa80362e541122164716b9830874950b6b8c8ba6a7c4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-basic", "size": 0, "sha1": null, - "md5": "f62895c1844a812f25561b9d02cdf125ade487bf92a60bcc00e2c66cfc08b794", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f62895c1844a812f25561b9d02cdf125ade487bf92a60bcc00e2c66cfc08b794", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-color", "size": 0, "sha1": null, - "md5": "2a4642610d94fb16e2d0ba2d04b72e395814bc25744b5f269ff3f28893e64df0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2a4642610d94fb16e2d0ba2d04b72e395814bc25744b5f269ff3f28893e64df0", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-cygwin", "size": 0, "sha1": null, - "md5": "7a6f37c37d18a8dcddaf2d1ff64d42423ae6177272d8e64e201e216c240c449c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7a6f37c37d18a8dcddaf2d1ff64d42423ae6177272d8e64e201e216c240c449c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-cygwin-native", "size": 0, "sha1": null, - "md5": "0660c542f166cae23a7218f75123180e6ad8d5acbd342068314c91964cd4390e", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0660c542f166cae23a7218f75123180e6ad8d5acbd342068314c91964cd4390e", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-unicode", "size": 0, "sha1": null, - "md5": "063264a85fd735a13028390c8d43cf38b5214417c6e48908eabb85bcdb9b7495", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "063264a85fd735a13028390c8d43cf38b5214417c6e48908eabb85bcdb9b7495", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/r/rxvt-xpm", "size": 0, "sha1": null, - "md5": "e0d7ec933ce140fb9548664083bbab6604593b6fa1ba1dd6eb0a91dd795c9396", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e0d7ec933ce140fb9548664083bbab6604593b6fa1ba1dd6eb0a91dd795c9396", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s", @@ -996,247 +1102,278 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen", "size": 0, "sha1": null, - "md5": "60df1fc3f6346efdd64e6971b36e98bc35e2a175c0d4420e7fd22c5d0853c112", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "60df1fc3f6346efdd64e6971b36e98bc35e2a175c0d4420e7fd22c5d0853c112", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen-16color", "size": 0, "sha1": null, - "md5": "953590d73e211177f772e560bc41484de24a72459a741b3581db3c742e4d71f1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "953590d73e211177f772e560bc41484de24a72459a741b3581db3c742e4d71f1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen-256color", "size": 0, "sha1": null, - "md5": "868cdd7aeeb7201aa33883296d596d149f55002625a671876da65ce2f6a3b290", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "868cdd7aeeb7201aa33883296d596d149f55002625a671876da65ce2f6a3b290", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.Eterm", "size": 0, "sha1": null, - "md5": "0b940c1dbb17acdf27e5acb65f99e680da847619eb902e0a225b14b120971ed1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0b940c1dbb17acdf27e5acb65f99e680da847619eb902e0a225b14b120971ed1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.gnome", "size": 0, "sha1": null, - "md5": "4f7a5ad8721bd29977845ecc018cccd81ea6916842977509e1dfb370cd468c41", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4f7a5ad8721bd29977845ecc018cccd81ea6916842977509e1dfb370cd468c41", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.konsole", "size": 0, "sha1": null, - "md5": "7294a74cee3704e30d342c4208a863df0cf7efe83f0141ba1c5fd3768760155a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7294a74cee3704e30d342c4208a863df0cf7efe83f0141ba1c5fd3768760155a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.konsole-256color", "size": 0, "sha1": null, - "md5": "a5ac0409c4cd8c518f267a5a48bcdc82f3b7f137dc97f448837a63153d330236", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a5ac0409c4cd8c518f267a5a48bcdc82f3b7f137dc97f448837a63153d330236", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.linux", "size": 0, "sha1": null, - "md5": "0da28a0c084ef373054cf43aa4d4899636ff40b812bb8d66e325f2d0c30ceef5", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0da28a0c084ef373054cf43aa4d4899636ff40b812bb8d66e325f2d0c30ceef5", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.mlterm", "size": 0, "sha1": null, - "md5": "b5c44865b01a0ef5375430bff581ced25e0c39bd8babbbafbbe16fa6ae396c89", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "b5c44865b01a0ef5375430bff581ced25e0c39bd8babbbafbbe16fa6ae396c89", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.mlterm-256color", "size": 0, "sha1": null, - "md5": "4d948d3366566dd82ddbf1db563f22e987c44b6add1536723b97691a39b57e27", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4d948d3366566dd82ddbf1db563f22e987c44b6add1536723b97691a39b57e27", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.mrxvt", "size": 0, "sha1": null, - "md5": "1055b1ae17f86dc7e658fb34613d8f9a4e845e49365c35d3a6053f8951c0d9b1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1055b1ae17f86dc7e658fb34613d8f9a4e845e49365c35d3a6053f8951c0d9b1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.putty", "size": 0, "sha1": null, - "md5": "d1d4e5abe3e72dcb4239a18763dd5e55b98c95b4fe2a21c0edee963e3297184b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d1d4e5abe3e72dcb4239a18763dd5e55b98c95b4fe2a21c0edee963e3297184b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.putty-256color", "size": 0, "sha1": null, - "md5": "32ea43f836ec63b2bd11f86d7a42f3ce858beba03f1b28eb6581618dadb52f79", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "32ea43f836ec63b2bd11f86d7a42f3ce858beba03f1b28eb6581618dadb52f79", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.rxvt", "size": 0, "sha1": null, - "md5": "56c9d69c6d47692e303fe4d96181076162910cf74cefe89437ead6f26c408c3d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "56c9d69c6d47692e303fe4d96181076162910cf74cefe89437ead6f26c408c3d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.teraterm", "size": 0, "sha1": null, - "md5": "725d4c2a9c80bed343cb48aadc13aabc855b5aa1a573c9a54bae2dc529a9c5e2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "725d4c2a9c80bed343cb48aadc13aabc855b5aa1a573c9a54bae2dc529a9c5e2", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.vte", "size": 0, "sha1": null, - "md5": "0e339b3d65c23a066ac9d8d7d3afaf266feb11dab2d042406a3ec45873eebba2", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0e339b3d65c23a066ac9d8d7d3afaf266feb11dab2d042406a3ec45873eebba2", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.vte-256color", "size": 0, "sha1": null, - "md5": "e69bfa913b17f9fff3ead0289fbed657a21c21e4de4a4d9eb8edaf70754db8ed", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e69bfa913b17f9fff3ead0289fbed657a21c21e4de4a4d9eb8edaf70754db8ed", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.xterm-256color", "size": 0, "sha1": null, - "md5": "63e5331cd64a5211a4ed476452a2654d77825c2449d989cf2e6e8a7889fc8aa8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "63e5331cd64a5211a4ed476452a2654d77825c2449d989cf2e6e8a7889fc8aa8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.xterm-new", "size": 0, "sha1": null, - "md5": "0215182a3f8a0ec27209799f21befa88a3f588fdb5663edcd9148e065ceb7ae3", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0215182a3f8a0ec27209799f21befa88a3f588fdb5663edcd9148e065ceb7ae3", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.xterm-r6", "size": 0, "sha1": null, - "md5": "ecd3c79d5dc9301f0472af6a58ff9319275091556bbcaaa7d4b79833ac2f9dd1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ecd3c79d5dc9301f0472af6a58ff9319275091556bbcaaa7d4b79833ac2f9dd1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/screen.xterm-xfree86", "size": 0, "sha1": null, - "md5": "0215182a3f8a0ec27209799f21befa88a3f588fdb5663edcd9148e065ceb7ae3", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0215182a3f8a0ec27209799f21befa88a3f588fdb5663edcd9148e065ceb7ae3", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/st", "size": 0, "sha1": null, - "md5": "6c9514d660232ea443e619ab3ab6dfb9fea10b19bdd168a3da112db01001136c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6c9514d660232ea443e619ab3ab6dfb9fea10b19bdd168a3da112db01001136c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/st-16color", "size": 0, "sha1": null, - "md5": "f029dc0aa4a8e755ae1673dd1cb11ae4af30789c0d27f5015fe7d008b22d8159", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f029dc0aa4a8e755ae1673dd1cb11ae4af30789c0d27f5015fe7d008b22d8159", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/st-256color", "size": 0, "sha1": null, - "md5": "7ae4cbb8a2784c2e95cd166b635878dfb4e53471afa32723d4186cb5343702c1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7ae4cbb8a2784c2e95cd166b635878dfb4e53471afa32723d4186cb5343702c1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/stterm", "size": 0, "sha1": null, - "md5": "6c9514d660232ea443e619ab3ab6dfb9fea10b19bdd168a3da112db01001136c", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6c9514d660232ea443e619ab3ab6dfb9fea10b19bdd168a3da112db01001136c", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/stterm-16color", "size": 0, "sha1": null, - "md5": "f029dc0aa4a8e755ae1673dd1cb11ae4af30789c0d27f5015fe7d008b22d8159", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f029dc0aa4a8e755ae1673dd1cb11ae4af30789c0d27f5015fe7d008b22d8159", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/stterm-256color", "size": 0, "sha1": null, - "md5": "7ae4cbb8a2784c2e95cd166b635878dfb4e53471afa32723d4186cb5343702c1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7ae4cbb8a2784c2e95cd166b635878dfb4e53471afa32723d4186cb5343702c1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/sun", "size": 0, "sha1": null, - "md5": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/sun1", "size": 0, "sha1": null, - "md5": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/s/sun2", "size": 0, "sha1": null, - "md5": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "02e392161cb23f49a8fb1ba2f1a6583e013c0c26672f58c5eaca828db3b19914", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/t", @@ -1244,39 +1381,44 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/t/teraterm", "size": 0, "sha1": null, - "md5": "75be3c4134fb55cb4b90e82eb97a7cc1cf346015a1afd723f48171862250e748", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "75be3c4134fb55cb4b90e82eb97a7cc1cf346015a1afd723f48171862250e748", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/t/teraterm2.3", "size": 0, "sha1": null, - "md5": "6598b360cd87b5c3e3f99a5b0b4d462c59e754bad79968febc84c77b7acc3bdc", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6598b360cd87b5c3e3f99a5b0b4d462c59e754bad79968febc84c77b7acc3bdc", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/t/tmux", "size": 0, "sha1": null, - "md5": "fe430822d0555eaadfd3748d7a56e78d60b42cd51a0cc492b8b918d55212ed12", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "fe430822d0555eaadfd3748d7a56e78d60b42cd51a0cc492b8b918d55212ed12", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/t/tmux-256color", "size": 0, "sha1": null, - "md5": "3e23bb2e0eda229c32ffe3b9ea54c11919a01d539ca4d94650349c3da2e2ac48", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3e23bb2e0eda229c32ffe3b9ea54c11919a01d539ca4d94650349c3da2e2ac48", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v", @@ -1284,95 +1426,107 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vs100", "size": 0, "sha1": null, - "md5": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt100", "size": 0, "sha1": null, - "md5": "44fe1bfcc36f3a7669a387b623a44c360f9e150868f9924920182b44bcbbdba6", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "44fe1bfcc36f3a7669a387b623a44c360f9e150868f9924920182b44bcbbdba6", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt100-am", "size": 0, "sha1": null, - "md5": "44fe1bfcc36f3a7669a387b623a44c360f9e150868f9924920182b44bcbbdba6", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "44fe1bfcc36f3a7669a387b623a44c360f9e150868f9924920182b44bcbbdba6", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt100-nav", "size": 0, "sha1": null, - "md5": "e509a4ee7373ff884ef9b5b293fdffa88182711d6b0448fe99d2cbeb1939114a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e509a4ee7373ff884ef9b5b293fdffa88182711d6b0448fe99d2cbeb1939114a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt102", "size": 0, "sha1": null, - "md5": "60e451f57c0308b79004ebc6189b49417b4ac11d783154072cae803a11af7d3f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "60e451f57c0308b79004ebc6189b49417b4ac11d783154072cae803a11af7d3f", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt200", "size": 0, "sha1": null, - "md5": "75a4723bfcdcd22756366838f1d65233f386d7592b019740c8ca5b578e9a5857", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "75a4723bfcdcd22756366838f1d65233f386d7592b019740c8ca5b578e9a5857", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt220", "size": 0, "sha1": null, - "md5": "75a4723bfcdcd22756366838f1d65233f386d7592b019740c8ca5b578e9a5857", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "75a4723bfcdcd22756366838f1d65233f386d7592b019740c8ca5b578e9a5857", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vt52", "size": 0, "sha1": null, - "md5": "1d8e7d40be89fe71e5d2582caa5168fe53ed85d9063e0ccf42e5c53f4d17b069", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1d8e7d40be89fe71e5d2582caa5168fe53ed85d9063e0ccf42e5c53f4d17b069", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vte", "size": 0, "sha1": null, - "md5": "8cb5a672dedd365d4831f11fbafedf0f803e70e7bb4dea69d9aa371027b6cd72", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8cb5a672dedd365d4831f11fbafedf0f803e70e7bb4dea69d9aa371027b6cd72", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vte-256color", "size": 0, "sha1": null, - "md5": "0462f44fd6f4e5ac720e9e315bad30d6236716dbf31bd083fb619444ce56e3aa", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "0462f44fd6f4e5ac720e9e315bad30d6236716dbf31bd083fb619444ce56e3aa", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/v/vwmterm", "size": 0, "sha1": null, - "md5": "eae3fe39004992478d09bdb5063c6609f8c6f5119053de8fca645002b993b535", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "eae3fe39004992478d09bdb5063c6609f8c6f5119053de8fca645002b993b535", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/w", @@ -1380,23 +1534,26 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/w/wsvt25", "size": 0, "sha1": null, - "md5": "28d3410e6b83a3b78a41f108098ac8772a3af3ee2b627b9f9bb4b19b363a5be3", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "28d3410e6b83a3b78a41f108098ac8772a3af3ee2b627b9f9bb4b19b363a5be3", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/w/wsvt25m", "size": 0, "sha1": null, - "md5": "18c85db3b0ef0ab15b7eb8dc4ac6ea14a37d851628220c8bb61e2edfa4f81683", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "18c85db3b0ef0ab15b7eb8dc4ac6ea14a37d851628220c8bb61e2edfa4f81683", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x", @@ -1404,336 +1561,385 @@ "sha1": null, "md5": null, "sha256": null, - "sha512": null + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xfce", "size": 0, "sha1": null, - "md5": "3dd1f7ed31697af67aaeb0c5efc724298d1a92e76bbc406fa17f98c927533da3", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3dd1f7ed31697af67aaeb0c5efc724298d1a92e76bbc406fa17f98c927533da3", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm", "size": 0, "sha1": null, - "md5": "1e56cd2b185047fd1fda6eacf067d1d85191463f1da4b1bf2128e17fe609815f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1e56cd2b185047fd1fda6eacf067d1d85191463f1da4b1bf2128e17fe609815f", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-1002", "size": 0, "sha1": null, - "md5": "3f8873764e44acb8d47cb743ad4203584698f3dfc71cbbeb70da2dbff5d5c4be", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3f8873764e44acb8d47cb743ad4203584698f3dfc71cbbeb70da2dbff5d5c4be", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-1003", "size": 0, "sha1": null, - "md5": "2ae6ccb1c3c7af51aa8a24924bb87974e90b6559dd0ed057c42ae7cffd2ff840", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2ae6ccb1c3c7af51aa8a24924bb87974e90b6559dd0ed057c42ae7cffd2ff840", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-1005", "size": 0, "sha1": null, - "md5": "db3f585af9406e3f119d2708ebe8381c465b17e827d668825901e65335613543", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "db3f585af9406e3f119d2708ebe8381c465b17e827d668825901e65335613543", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-1006", "size": 0, "sha1": null, - "md5": "977ff286ea5a88afbd8998a74d04146288e3011d901314260fd54bff3497b2fa", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "977ff286ea5a88afbd8998a74d04146288e3011d901314260fd54bff3497b2fa", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-16color", "size": 0, "sha1": null, - "md5": "b6b95048b459156682b6a3212ce0d4f099c87a54882e8c876530004d3ca69819", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "b6b95048b459156682b6a3212ce0d4f099c87a54882e8c876530004d3ca69819", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-24", "size": 0, "sha1": null, - "md5": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-256color", "size": 0, "sha1": null, - "md5": "7620aabd7be3a33a75e4817db17f6714bcf2a5336c6c6c51b12c2ee43e74c100", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7620aabd7be3a33a75e4817db17f6714bcf2a5336c6c6c51b12c2ee43e74c100", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-88color", "size": 0, "sha1": null, - "md5": "6d0a051181c07ddf0442f542375ac67d86eb7c0aaa0fe919361a1bce09974123", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "6d0a051181c07ddf0442f542375ac67d86eb7c0aaa0fe919361a1bce09974123", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-8bit", "size": 0, "sha1": null, - "md5": "5956361073c012c553c68a0089065a44d0c7e950df02114e6520f815f419aa82", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "5956361073c012c553c68a0089065a44d0c7e950df02114e6520f815f419aa82", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-basic", "size": 0, "sha1": null, - "md5": "a9a35b70ee5a50c27637598f84d206ed9bfe4e66550ff863e0115e548ae0b3fb", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "a9a35b70ee5a50c27637598f84d206ed9bfe4e66550ff863e0115e548ae0b3fb", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-bold", "size": 0, "sha1": null, - "md5": "4296a878469b6bc5bab5acbce875e43bc501ab57a62d8d29cd34a424ba1e9de4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "4296a878469b6bc5bab5acbce875e43bc501ab57a62d8d29cd34a424ba1e9de4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-color", "size": 0, "sha1": null, - "md5": "f74fe619914bfe650f6071bbbaf242c439de8a2f0ecefe9e80870216dfb844b4", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "f74fe619914bfe650f6071bbbaf242c439de8a2f0ecefe9e80870216dfb844b4", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-direct", "size": 0, "sha1": null, - "md5": "3519edd987899e953931c7907e0342d2392a3383ffddd6eef7b632ff59516cca", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3519edd987899e953931c7907e0342d2392a3383ffddd6eef7b632ff59516cca", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-direct2", "size": 0, "sha1": null, - "md5": "9316fced488ee2277fbb281a302362b3c82a6c414954037cbe6c2d2ff3e65aa8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "9316fced488ee2277fbb281a302362b3c82a6c414954037cbe6c2d2ff3e65aa8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-hp", "size": 0, "sha1": null, - "md5": "c1fb479583d422e6046b35302f944962b98e409161f4d13806aed6c79b9b5da7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "c1fb479583d422e6046b35302f944962b98e409161f4d13806aed6c79b9b5da7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-new", "size": 0, "sha1": null, - "md5": "9044f070e173876a4914cc4fb965a2832fcdb18abee1d82bae5df29f4d6745f0", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "9044f070e173876a4914cc4fb965a2832fcdb18abee1d82bae5df29f4d6745f0", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-nic", "size": 0, "sha1": null, - "md5": "18e365928ffb140aae9e86bc4f758a9bd603237a74e41185d5147579a65fd601", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "18e365928ffb140aae9e86bc4f758a9bd603237a74e41185d5147579a65fd601", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-noapp", "size": 0, "sha1": null, - "md5": "43673e62c97d99d9ba1ae13e2742eee3cd1f94c1447a98f6daefc14b4d2dfb2f", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "43673e62c97d99d9ba1ae13e2742eee3cd1f94c1447a98f6daefc14b4d2dfb2f", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-old", "size": 0, "sha1": null, - "md5": "927b8821c947b96b020ca7341dffb57bdfa2986fcaecd5fdbf2ca2369eacc285", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "927b8821c947b96b020ca7341dffb57bdfa2986fcaecd5fdbf2ca2369eacc285", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-pcolor", "size": 0, "sha1": null, - "md5": "8e26c29e1e306f010b464dacc578ca179943ff3717e43af3d566bad24d74dc10", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "8e26c29e1e306f010b464dacc578ca179943ff3717e43af3d566bad24d74dc10", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-r5", "size": 0, "sha1": null, - "md5": "82098ec067be6189e91e8264278bb85fe3b7bfdeaa3754be301313be140522ca", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "82098ec067be6189e91e8264278bb85fe3b7bfdeaa3754be301313be140522ca", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-r6", "size": 0, "sha1": null, - "md5": "ee12fe6d2d8e1d0b83d1042fe8a38f1aed6fd73e2c7316e6db5ec5b061b09ef8", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ee12fe6d2d8e1d0b83d1042fe8a38f1aed6fd73e2c7316e6db5ec5b061b09ef8", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-sco", "size": 0, "sha1": null, - "md5": "7b263571d8faea2decc93c9544d318bad2575287c0435172d4d7b427da97fb0b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "7b263571d8faea2decc93c9544d318bad2575287c0435172d4d7b427da97fb0b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-sun", "size": 0, "sha1": null, - "md5": "59ff2e4c54bdd7c06e8f14fcd5c7dd2687560f6a251e00af47f90cd3a25f69b6", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "59ff2e4c54bdd7c06e8f14fcd5c7dd2687560f6a251e00af47f90cd3a25f69b6", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-utf8", "size": 0, "sha1": null, - "md5": "1dbcda3b0020deb52bdbbc2103499422c7a25e1527cf17445ccf7b08b1eb2241", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "1dbcda3b0020deb52bdbbc2103499422c7a25e1527cf17445ccf7b08b1eb2241", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-vt220", "size": 0, "sha1": null, - "md5": "99afd4451a07b57527fa44c0e08a4543d151464a26fc4d9326116373f33c8e3b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "99afd4451a07b57527fa44c0e08a4543d151464a26fc4d9326116373f33c8e3b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-vt52", "size": 0, "sha1": null, - "md5": "ec2164504f16ace2ce5d17b1f07a655029767148dc5f58d388853454aeb47a6d", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "ec2164504f16ace2ce5d17b1f07a655029767148dc5f58d388853454aeb47a6d", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-x10mouse", "size": 0, "sha1": null, - "md5": "528494945a2e0934b9ce68e94e95853ba0d1a83f0b48f53139da212dfabcda68", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "528494945a2e0934b9ce68e94e95853ba0d1a83f0b48f53139da212dfabcda68", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-x11hilite", "size": 0, "sha1": null, - "md5": "b7af246ba47b100afcabb3dee7cc52c1686ee2127becd73d952823e410fe58e7", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "b7af246ba47b100afcabb3dee7cc52c1686ee2127becd73d952823e410fe58e7", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-x11mouse", "size": 0, "sha1": null, - "md5": "dbda39a53519d0aea9524d658e6bfd6a7337a83b30d2539c6f31d2667a8a3e17", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "dbda39a53519d0aea9524d658e6bfd6a7337a83b30d2539c6f31d2667a8a3e17", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v32", "size": 0, "sha1": null, - "md5": "815040ec1c43c48641c930d6efd596dd3ffedb858c092d204db7d679dedca047", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "815040ec1c43c48641c930d6efd596dd3ffedb858c092d204db7d679dedca047", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v33", "size": 0, "sha1": null, - "md5": "3cd4e00bb8394ae485e6e19d3f79fda189ad180d6c30f67ea9f854dd220c39b9", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "3cd4e00bb8394ae485e6e19d3f79fda189ad180d6c30f67ea9f854dd220c39b9", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v333", "size": 0, "sha1": null, - "md5": "d76ac338322b93169c4f1be085e0a28ac2de5c70bc2e7acf3967fb0ff2d05094", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "d76ac338322b93169c4f1be085e0a28ac2de5c70bc2e7acf3967fb0ff2d05094", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v40", "size": 0, "sha1": null, - "md5": "52a70e4af3efcd6d57156501c56f99de86374792fd9ed85b8e6f97e04fd674a1", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "52a70e4af3efcd6d57156501c56f99de86374792fd9ed85b8e6f97e04fd674a1", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v43", "size": 0, "sha1": null, - "md5": "bef75e99c6d11623dc551d28b3e755bbdd611c3bc2eacfe7adb3dc3996cc9a9a", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "bef75e99c6d11623dc551d28b3e755bbdd611c3bc2eacfe7adb3dc3996cc9a9a", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xf86-v44", "size": 0, "sha1": null, - "md5": "e8d2495110bbfebabdb8d89dad2d39a70bb806704bb379d8d0a9ad61869a8781", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "e8d2495110bbfebabdb8d89dad2d39a70bb806704bb379d8d0a9ad61869a8781", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xfree86", "size": 0, "sha1": null, - "md5": "2cfabe28ee20533848426f6c04c134603dd121a3d6831d0ec8a12f200e5a863b", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2cfabe28ee20533848426f6c04c134603dd121a3d6831d0ec8a12f200e5a863b", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterm-xi", "size": 0, "sha1": null, - "md5": "59b2ad72d3752c4e3875502821fc90857f3b4d7e3ded5ff975b6c557e3944076", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "59b2ad72d3752c4e3875502821fc90857f3b4d7e3ded5ff975b6c557e3944076", + "sha512": null, + "extra_data": {} }, { "path": "/usr/share/terminfo/x/xterms", "size": 0, "sha1": null, - "md5": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", - "sha256": null, - "sha512": null + "md5": null, + "sha256": "2b1249158a7053eee58242625f79b29f35da721cbcf695a327521cfed3bec117", + "sha512": null, + "extra_data": {} } - ] + ], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "rpm_installed_database_sqlite", + "purl": "pkg:rpm/ncurses-base@6.1?arch=noarch" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/rpm_installed/rootfs/Packages b/tests/packagedcode/data/rpm_installed/rootfs/Packages new file mode 100755 index 0000000000000000000000000000000000000000..a44149161b87d3676fa62fcbd6a5045142bf358b GIT binary patch literal 4575232 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�aN%sLQlMk1uA+Q(*K4Q#f2*y#33Jzn6Nnm=S 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 z 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
xMvd^6>|g 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
DWbW$H9G=FI!km?qs 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�UdBcuQTa6;BtOgNu}*abSu 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%0AE`X2E5J*?Tr0y|P34TYnRg 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 QzBROQ-_o`2Le@BYFc{xq8H`^9%t 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

0?B}Y* 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

_&y5$|RuOw{0}*iJNP6AvB# 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 kxKjk&X~Hn4 Date: Sat, 23 Apr 2022 22:25:27 +0200 Subject: [PATCH 29/36] Adopt new handler design for PyPI packages We now have these data file handlers: * PythonEggPkgInfoFile * PythonEditableInstallationPkgInfoFile * PythonSdistPkgInfoFile * PythonInstalledWheelMetadataFile * PyprojectTomlHandler * PypiWheelHandler * PypiEggHandler * PypiSdistArchiveHandler * PythonSetupPyHandler * SetupCfgHandler * PipfileHandler * PipfileLockHandler * PipRequirementsFileHandler And we assemble these in Packages correctly. Signed-off-by: Philippe Ombredanne --- src/packagedcode/pypi.py | 767 +- ...s-1.2.1-py2.py3-none-any.whl-expected.json | 57 +- ...commoncode-21.5.12-py3.9.egg-expected.json | 28 +- .../scancode_toolkit.egg-info-expected.json | 1029 ++- .../dist-info-metadata/METADATA-expected.json | 57 + .../scan/.dist-info}/METADATA | 0 .../data/pypi/metadata/PKG-INFO-expected.json | 9 +- .../pypi/metadata/metadata.dist-info/METADATA | 34 + .../METADATA-expected.json | 9 +- .../pypi/metadata/v10/PKG-INFO-expected.json | 9 +- .../pypi/metadata/v11/PKG-INFO-expected.json | 9 +- .../pypi/metadata/v12/PKG-INFO-expected.json | 11 +- .../pypi/metadata/v20/PKG-INFO-expected.json | 11 +- .../pypi/metadata/v21/PKG-INFO-expected.json | 13 +- .../sample1/Pipfile.lock-expected.json | 7 +- .../pipfile.lock/sample1/output.expected.json | 2 - .../sample2/Pipfile.lock-expected.json | 7 +- .../pipfile.lock/sample2/output.expected.json | 2 - .../sample3/Pipfile.lock-expected.json | 7 +- .../pipfile.lock/sample3/output.expected.json | 2 - .../sample4/Pipfile.lock-expected.json | 7 +- .../pipfile.lock/sample4/output.expected.json | 2 - .../sample5/Pipfile.lock-expected.json | 7 +- .../pipfile.lock/sample5/output.expected.json | 2 - .../basic/output.expected.json | 7 +- .../comments_and_empties/output.expected.json | 7 +- .../complex/output.expected.json | 7 +- .../requirements_txt/dev/output.expected.json | 7 +- .../double_extras/output.expected.json | 7 +- .../editable/output.expected.json | 7 +- .../eol_comment/output.expected.json | 7 +- .../invalid_spec/output.expected.json | 7 +- .../output.expected.json | 7 +- .../many_specs/output.expected.json | 7 +- .../mixed/output.expected.json | 7 +- .../pinned/output.expected.json | 7 +- .../repeated/output.expected.json | 7 +- .../requirements_in/output.expected.json | 7 +- .../urls_wth_checksums/output.expected.json | 7 +- .../vcs-git/output.expected.json | 7 +- .../vcs_editable/output.expected.json | 7 +- .../vcs_eggs/output.expected.json | 7 +- .../vcs_extras_require/output.expected.json | 7 +- .../asyncio-master/setup.py-expected.json | 2 - .../certifi-2020.6.20/setup.py-expected.json | 2 - .../chardet-3.0.4/setup.py-expected.json | 2 - .../flit-2.3.0/setup.py-expected.json | 2 - .../paho-mqtt-1.5.0/setup.py-expected.json | 2 - .../pexpect-4.6.0/setup.py-expected.json | 2 - .../pycparser-2.20/setup.py-expected.json | 2 - .../pyserial-3.4/setup.py-expected.json | 2 - .../pytoml-0.1.21/setup.py-expected.json | 2 - .../six-1.14.0/setup.py-expected.json | 2 - .../urllib3-1.25.9/setup.py-expected.json | 2 - .../pypi/setup.py/arpy_setup.py-expected.json | 9 +- .../boolean2_py_setup.py-expected.json | 9 +- .../container_check_setup.py-expected.json | 9 +- .../setup.py/fb303_py_setup.py-expected.json | 9 +- .../setup.py/frell_src_setup.py-expected.json | 9 +- .../pypi/setup.py/gyp_setup.py-expected.json | 9 +- .../setup.py/interlap_setup.py-expected.json | 9 +- .../pypi/setup.py/mb_setup.py-expected.json | 9 +- .../pypi/setup.py/ntfs_setup.py-expected.json | 9 +- .../setup.py/nvchecker_setup.py-expected.json | 9 +- ..._agents_common_code_setup.py-expected.json | 9 +- .../packageurl_python_setup.py-expected.json | 9 +- .../pipdeptree_setup.py-expected.json | 9 +- .../setup.py/pluggy_setup.py-expected.json | 7 +- .../setup.py/pydep_setup.py-expected.json | 9 +- .../setup.py/pygtrie_setup.py-expected.json | 7 +- .../setup.py/pyrpm_2_setup.py-expected.json | 9 +- ...python_publicsuffix_setup.py-expected.json | 9 +- ...ology_py_libversion_setup.py-expected.json | 9 +- .../setup.py/saneyaml_setup.py-expected.json | 9 +- .../data/pypi/setup.py/setup.py-expected.json | 9 +- .../setup.py/setup.py-simple-expected.json | 2 - .../setuppycheck_setup.py-expected.json | 9 +- .../setup.py/url_py_setup.py-expected.json | 9 +- .../pypi/setup.py/venv_setup.py-expected.json | 9 +- .../setup.py/with_name-setup.py.expected.json | 9 +- .../without_name-setup.py.expected.json | 7 +- .../setup.py/xmltodict_setup.py-expected.json | 9 +- .../unpackage_source_parser-expected.json | 2 - .../PyJPString-0.0.3-expected.json | 9 +- .../PyJPString-0.0.3-subdir-expected.json | 136 +- .../python-mimeparse-1.6.0-expected.json | 9 +- .../pyup-django-0.4.0-expected.json | 11 +- .../metadata-1.2/anonapi-0.0.19-expected.json | 11 +- .../commoncode-21.5.12-expected.json | 9 +- .../Jinja2-2.10.dist-info-expected.json | 579 +- ...on_mimeparse-1.6.0.dist-info-expected.json | 73 +- .../toml-0.10.1.dist-info-expected.json | 192 +- .../urllib3-1.26.4.dist-info-expected.json | 790 +- .../haruka_bot-1.2.3.dist-info-expected.json | 196 +- .../pip-20.2.2.dist-info-expected.json | 7253 ++++++++++++++++- ...plugincode-21.1.21.dist-info-expected.json | 217 +- .../anonapi-0.0.19.dist-info-expected.json | 120 +- .../data/pypi/wheel/parse-wheel-expected.json | 2 - tests/packagedcode/test_pypi.py | 367 +- 99 files changed, 11691 insertions(+), 767 deletions(-) create mode 100644 tests/packagedcode/data/pypi/dist-info-metadata/METADATA-expected.json rename tests/packagedcode/data/pypi/{metadata => dist-info-metadata/scan/.dist-info}/METADATA (100%) create mode 100644 tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA rename tests/packagedcode/data/pypi/metadata/{ => metadata.dist-info}/METADATA-expected.json (90%) diff --git a/src/packagedcode/pypi.py b/src/packagedcode/pypi.py index a6c97cf2182..185606d81ba 100644 --- a/src/packagedcode/pypi.py +++ b/src/packagedcode/pypi.py @@ -9,7 +9,6 @@ # import ast -import fnmatch import io import json import logging @@ -19,25 +18,23 @@ import zipfile from pathlib import Path -import attr import dparse2 import pip_requirements_parser import pkginfo2 +from commoncode import fileutils from packageurl import PackageURL -from packaging.requirements import Requirement from packaging import markers +from packaging.requirements import Requirement from packaging.utils import canonicalize_name -from commoncode import filetype -from commoncode import fileutils from packagedcode import models from packagedcode.utils import build_description from packagedcode.utils import combine_expressions -try: - import importlib.metadata as importlib_metadata -except ImportError: - import importlib_metadata +# FIXME: we always want to use the external library rather than the built-in for now +import importlib_metadata +import base64 +from commoncode.fileutils import as_posixpath try: from zipfile import Path as ZipPath @@ -48,6 +45,8 @@ Detect and collect Python packages information. """ # TODO: add support for poetry and setup.cfg and metadata.json +# TODO: add support for pex, pyz, etc. +# TODO: Add missing ABOUT file for Pyserial code TRACE = False @@ -66,64 +65,240 @@ def logger_debug(*args): return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) -@attr.s() -class PythonPackageData(models.PackageData): - default_type = 'pypi' +class BasePypiHandler(models.DatafileHandler): + + @classmethod + def compute_normalized_license(cls, package): + return compute_normalized_license(package.declared_license) + + +class PythonEggPkgInfoFile(BasePypiHandler): + datasource_id = 'pypi_egg_pkginfo' + default_package_type = 'pypi' default_primary_language = 'Python' - default_web_baseurl = 'https://pypi.org' - default_download_baseurl = 'https://pypi.org/packages/source' - default_api_baseurl = 'https://pypi.org/pypi' - - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) - - def repository_homepage_url(self, baseurl=default_web_baseurl): - if self.name: - return f'{baseurl}/project/{baseurl}' - - def repository_download_url(self, baseurl=default_download_baseurl): - if self.name and self.version: - name = self.name - name1 = name[0] - return f'{baseurl}/{name1}/{name}/{name}-{self.version}.tar.gz' - - def api_data_url(self, baseurl=default_api_baseurl): - if self.name: - if self.version: - return f'{baseurl}/{self.name}/{self.version}/json' - else: - return f'{baseurl}/{self.name}/json' + path_patterns = ('*/EGG-INFO/PKG-INFO',) + description = 'PyPI extracted egg PKG-INFO' + documentation_url = 'https://peps.python.org/pep-0376/' + @classmethod + def parse(cls, location): + yield parse_metadata( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) -meta_dir_suffixes = '.dist-info', '.egg-info', 'EGG-INFO', -meta_file_names = 'PKG-INFO', 'METADATA', + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + # two levels up + root = resource.parent(codebase).parent(codebase) + if root: + return cls.assign_package_to_resources(package, root, codebase) -@attr.s() -class MetadataFile(PythonPackageData, models.PackageDataFile): +class PythonEditableInstallationPkgInfoFile(BasePypiHandler): + datasource_id = 'pypi_editable_egg_pkginfo' + default_package_type = 'pypi' + default_primary_language = 'Python' + path_patterns = ('*.egg-info/PKG-INFO',) + description = 'PyPI editable local installation PKG-INFO' + documentation_url = 'https://peps.python.org/pep-0376/' - file_patterns = meta_file_names + @classmethod + def parse(cls, location): + yield parse_metadata( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith(meta_file_names) + def assign_package_to_resources(cls, package, resource, codebase): + # only the parent for now... though it can be more complex + return cls.assign_package_to_parent_tree(package, resource, codebase) + + +class BaseExtractedPythonLayout(BasePypiHandler): + """ + Base class for development repos, sdist tarballs and other related extracted + layourt for Python packages that can use and mix multiple datafiles. + """ + + @classmethod + def assemble(cls, package_data, resource, codebase): + # a source distribution can have many manifests + datafile_name_patterns = ( + 'PKG-INFO', + 'setup.py', + 'setup.cfg', + 'Pipfile.lock', + 'Pipfile', + ) + PipRequirementsFileHandler.path_patterns + + parent = resource.parent(codebase) + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=parent, + codebase=codebase, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): + return cls.assign_package_to_parent_tree(package, resource, codebase) + + +class PythonSdistPkgInfoFile(BaseExtractedPythonLayout): + datasource_id = 'pypi_sdist_pkginfo' + default_package_type = 'pypi' + default_primary_language = 'Python' + path_patterns = ('*/PKG-INFO',) + description = 'PyPI extracted sdist PKG-INFO' + documentation_url = 'https://peps.python.org/pep-0314/' @classmethod - def recognize(cls, location): + def parse(cls, location): + yield parse_metadata( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + +class PythonInstalledWheelMetadataFile(BasePypiHandler): + datasource_id = 'pypi_wheel_metadata' + path_patterns = ('*.dist-info/METADATA',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'PyPI installed wheel METADATA' + documentation_url = 'https://packaging.python.org/en/latest/specifications/core-metadata/' + + @classmethod + def parse(cls, location): + yield parse_metadata( + location=location, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + @classmethod + def assign_package_to_resources(cls, package, resource, codebase): """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. + Assign files to package for an installed wheel. This requires a bit + of navigation around as the files can be in multiple places. """ - yield parse_metadata(cls, location) + site_packages = resource.parent(codebase).parent(codebase).parent(codebase) + if not site_packages: + return + package_data = resource.package_data + assert len(resource.package_data) == 1, ( + f'Unsupported Pypi METADATA wheel structure: {resource.path!r} ' + f'with multiple {package_data!r}' + ) + + package_data = models.PackageData.from_dict(package_data[0]) + + package_uid = package.package_uid + + # save thyself! + resource.for_packages.append(package_uid) + resource.save(codebase) + + # collect actual paths based on the file references + for file_ref in package_data.file_references: + path_ref = file_ref.path + if path_ref.startswith('..'): + # relative paths need special treatment + # most of thense are references to bin ../../../bin/wheel + cannot_resolve = False + ref_resource = None + while path_ref.startswith('..'): + _, _, path_ref.partition('../') + ref_resource = site_packages.parent(codebase) + if not ref_resource: + cannot_resolve = True + break + if cannot_resolve or not ref_resource: + # TODO:w e should log these kind of things + continue + else: + ref_resource.for_packages.append(package_uid) + ref_resource.save(codebase) + else: + ref_resource = get_resource_for_path( + path=path_ref, + root=site_packages, + codebase=codebase, + ) + if ref_resource: + ref_resource.for_packages.append(package_uid) + ref_resource.save(codebase) + + +def get_resource_for_path(path, root, codebase): + """ + Return a resource in ``codebase`` that has a ``path`` relative to the + ``root` Resource + + For example, say we start from this: + path: this/is/that therefore segments [this, is, that] + root: /usr/foo + + We would have these iterations: + iteration1 + root = /usr/foo + segments = [this, is, that] + seg this + segments = [is, that] + children = [/usr/foo/this] + root = /usr/foo/this + + iteration2 + root = /usr/foo/this + segments = [is, that] + seg is + segments = [that] + children = [/usr/foo/this/is] + root = /usr/foo/this/is + + iteration3 + root = /usr/foo/this/is + segments = [that] + seg that + segments = [] + children = [/usr/foo/this/is/that] + root = /usr/foo/this/is/that + + finally return root as /usr/foo/this/is/that + """ + segments = path.strip('/').split('/') + while segments: + seg = segments.pop(0) + children = [c for c in root.children(codebase) if c.name == seg] + if len(children) != 1: + return + else: + root = children[0] + return root + + +# FIXME: Implement me +class PyprojectTomlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'pypi_pyproject_toml' + path_patterns = ('*pyproject.toml',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Python pyproject.toml' + documentation_url = 'https://peps.python.org/pep-0621/' + + +META_DIR_SUFFIXES = '.dist-info', '.egg-info', 'EGG-INFO', -def parse_metadata(cls, location): +def parse_metadata(location, datasource_id, package_type): """ - Return a PythonPackage from an PKG-INFO or METADATA file ``location`` - string or pathlib.Path-like object. + Return a PackageData object from a PKG-INFO or METADATA file at ``location`` + which is a path string or pathlib.Path-like object (including a possible zip + file ZipPath for a wheel) Looks in neighboring files as needed when an installed layout is found. """ @@ -133,92 +308,167 @@ def parse_metadata(cls, location): # build from dir if we are an installed distro parent = path.parent - if parent.name.endswith(meta_dir_suffixes): + if parent.name.endswith(META_DIR_SUFFIXES): path = parent dist = importlib_metadata.PathDistribution(path) - # FIXME: handle other_urls meta = dist.metadata - urls, other_urls = get_urls(meta) - return cls( - name=get_attribute(meta, 'Name'), - version=get_attribute(meta, 'Version'), + name = get_attribute(meta, 'Name') + version = get_attribute(meta, 'Version') + + urls = get_urls(metainfo=meta, name=name, version=version) + + dependencies = get_dist_dependencies(dist) + + file_references = list(get_file_references(dist)) + + package_data = models.PackageData( + datasource_id=datasource_id, + type=package_type, + primary_language='Python', + name=name, + version=version, description=get_description(meta, location), declared_license=get_declared_license(meta), keywords=get_keywords(meta), parties=get_parties(meta), - dependencies=get_dist_dependencies(dist), + dependencies=dependencies, + file_references=file_references, **urls, ) + if not package_data.license_expression and package_data.declared_license: + package_data.license_expression = models.compute_normalized_license(package_data.declared_license) -bdist_file_suffixes = '.whl', '.egg', + return package_data -@attr.s() -class BinaryDistArchive(PythonPackageData, models.PackageDataFile): +def urlsafe_b64decode(data): + """ + urlsafe_b64decode without padding + SPDX-License-Identifier: MIT + Copyright (c) 2012-2014 Daniel Holth and contributors. + From: https://github.com/pypa/wheel/blob/66208910ab51f4008b034ef4833acfdc920f7606/src/wheel/util.py#L23 + """ + pad = b'=' * (4 - (len(data) & 3)) + return base64.urlsafe_b64decode(data.encode('ASCII') + pad) - file_patterns = ('*.whl', '*.egg',) - extensions = bdist_file_suffixes - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith(bdist_file_suffixes) +def get_file_references(dist): + """ + Yield FileReference found in a ``dist`` importlib_metadata.Distribution. + """ + if not dist.files: + return + + for filepath in dist.files or []: + # FIXME: the path is relative to the "site-packages" directory or the + # root of a wheel but this should be a scan path + ref = models.FileReference( + path=as_posixpath(str(filepath)), + size=filepath.size, + ) + + filehash = filepath.hash + if filehash: + algo = filehash.mode + value = filehash.value + if algo in ('sha256', 'sha512'): + # convert back to hex as this is a base64 without padding otherwise + value = urlsafe_b64decode(value).hex() + setattr(ref, algo, value) + yield ref + + +class PypiWheelHandler(BasePypiHandler): + datasource_id = 'pypi_wheel' + path_patterns = ('*.whl',) + filetypes = ('zip archive',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'PyPI wheel' + documentation_url = 'https://peps.python.org/pep-0427/' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with zipfile.ZipFile(location) as zf: for path in ZipPath(zf).iterdir(): - if not path.name.endswith(meta_dir_suffixes): + if not path.name.endswith(META_DIR_SUFFIXES): continue for metapath in path.iterdir(): - if metapath.name.endswith(meta_file_names): - yield parse_metadata(cls, metapath) + if not metapath.name.endswith('METADATA'): + continue + yield parse_metadata( + location=metapath, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) -sdist_file_suffixes = '.tar.gz', '.tar.bz2', '.zip', - -@attr.s() -class SourceDistArchive(PythonPackageData, models.PackageDataFile): - # TODO: we are ignoing sdists such as pex, pyz, etc. - file_patterns = ('*.tar.gz', '*.tar.bz2', '*.zip',) - extensions = sdist_file_suffixes +class PypiEggHandler(BasePypiHandler): + datasource_id = 'pypi_egg' + path_patterns = ('*.egg',) + filetypes = ('zip archive',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'PyPI egg' + documentation_url = 'https://web.archive.org/web/20210604075235/http://peak.telecommunity.com/DevCenter/PythonEggs' @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith(sdist_file_suffixes) + def parse(cls, location): + with zipfile.ZipFile(location) as zf: + for path in ZipPath(zf).iterdir(): + if not path.name.endswith(META_DIR_SUFFIXES): + continue + + for metapath in path.iterdir(): + if not metapath.name.endswith('PKG-INFO'): + continue + + yield parse_metadata( + location=metapath, + datasource_id=cls.datasource_id, + package_type=cls.default_package_type, + ) + + +class PypiSdistArchiveHandler(BasePypiHandler): + datasource_id = 'pypi_sdist' + path_patterns = ('*.tar.gz', '*.tar.bz2', '*.zip',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Python source distribution' + documentation_url = 'https://peps.python.org/pep-0643/' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def is_datafile(cls, location, filetypes=tuple()): + if super().is_datafile(location, filetypes=filetypes): + # TODO: there is a structure to an sdists name: aboutcode-toolkit-7.0.0.tar.gz + # TODO: there is more to it than this... based on actual listing of files inside + return True + @classmethod + def parse(cls, location): # FIXME: add dependencies - # FIXME: handle other_urls try: sdist = pkginfo2.SDist(location) except ValueError: return - urls, other_urls = get_urls(sdist) - yield cls( - name=sdist.name, - version=sdist.version, + + name = sdist.name + version = sdist.version + urls = get_urls(metainfo=sdist, name=name, version=version) + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + name=name, + version=version, description=get_description(sdist, location=location), declared_license=get_declared_license(sdist), keywords=get_keywords(sdist), @@ -227,40 +477,34 @@ def recognize(cls, location): ) -@attr.s() -class SetupPy(PythonPackageData, models.PackageDataFile): - - file_patterns = ('setup.py',) - extensions = ('.py',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('setup.py') +class PythonSetupPyHandler(BaseExtractedPythonLayout): + datasource_id = 'pypi_setup_py' + path_patterns = ('*setup.py',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Python setup.py' + documentation_url = 'https://docs.python.org/3/distutils/setupscript.html' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): setup_args = get_setup_py_args(location) # it may be legit to have a name-less package? # in anycase we do not want to fail because of that - package_name = setup_args.get('name') - urls, other_urls = get_urls(setup_args) + name = setup_args.get('name') - detected_version = setup_args.get('version') - if not detected_version: + version = setup_args.get('version') + if not version: # search for possible dunder versions here and elsewhere - detected_version = detect_version_attribute(location) - - yield cls( - name=package_name, - version=detected_version, + version = detect_version_attribute(location) + + urls = get_urls(metainfo=setup_args, name=name, version=version) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + name=name, + version=version, description=get_description(setup_args), parties=get_parties(setup_args), declared_license=get_declared_license(setup_args), @@ -270,60 +514,59 @@ def recognize(cls, location): ) -@attr.s() -class DependencyFile(PythonPackageData, models.PackageDataFile): - - file_patterns = ( - 'Pipfile', - 'conda.yml', - 'setup.cfg', - 'tox.ini', - ) - - @classmethod - def is_package_data_file(cls, location): - for file_pattern in cls.file_patterns: - if filetype.is_file(location) and location.endswith(file_pattern): - return True +class BaseDependencyFileHandler(BasePypiHandler): + """ + Base class for a dependency files parsed with the same library + """ @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): file_name = fileutils.file_name(location) dependency_type = get_dparse2_supported_file_name(file_name) if not dependency_type: return - dependent_packages = parse_with_dparse2( + dependencies = parse_with_dparse2( location=location, file_name=dependency_type, ) - yield cls(dependencies=dependent_packages) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies, + ) -@attr.s() -class PipfileLock(PythonPackageData, models.PackageDataFile): +class SetupCfgHandler(BaseExtractedPythonLayout): + datasource_id = 'pypi_setup_cfg' + path_patterns = ('*setup.cfg',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Python setup.cfg' + documentation_url = 'https://peps.python.org/pep-0390/' - file_patterns = ('Pipfile.lock',) - extensions = ('.lock',) - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return filetype.is_file(location) and location.endswith('Pipfile.lock') +class PipfileHandler(BaseDependencyFileHandler): + datasource_id = 'pipfile' + path_patterns = ('*Pipfile',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Pipfile' + documentation_url = 'https://github.com/pypa/pipfile' + + +class PipfileLockHandler(BaseDependencyFileHandler): + datasource_id = 'pipfile_lock' + path_patterns = ('*Pipfile.lock',) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'Pipfile.lock' + documentation_url = 'https://github.com/pypa/pipfile' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with open(location) as f: content = f.read() @@ -339,37 +582,69 @@ def recognize(cls, location): location=location, file_name='Pipfile.lock', ) - yield cls(sha256=sha256, dependencies=dependent_packages) + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + sha256=sha256, + dependencies=dependent_packages, + ) -@attr.s() -class RequirementsFile(PythonPackageData, models.PackageDataFile): +class PipRequirementsFileHandler(BaseDependencyFileHandler): + """ + A pip requirements (or constraints) file. - file_patterns = ( + Some example:: + >>> PipRequirementsFileHandler.is_datafile('dev-requirements.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirements.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirement.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirements.in', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirements.pip', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirements-dev.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('some-requirements-dev.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requires.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('requirements/base.txt', _bare_filename=True) + True + >>> PipRequirementsFileHandler.is_datafile('reqs.txt', _bare_filename=True) + True + """ + datasource_id = 'pip_requirements' + + path_patterns = ( '*requirement*.txt', '*requirement*.pip', '*requirement*.in', - 'requires.txt', - 'requirements/*.txt', - 'requirements/*.pip', - 'requirements/*.in', + '*requires.txt', + '*requirements/*.txt', + '*requirements/*.pip', + '*requirements/*.in', + '*reqs.txt', ) - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the ``location`` is likely a pip requirements file. - """ - return filetype.is_file(location) and is_requirements_file(location) + default_package_type = 'pypi' + default_primary_language = 'Python' + description = 'pip requirements file' + documentation_url = 'https://pip.pypa.io/en/latest/reference/requirements-file-format/' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): dependencies = get_requirements_txt_dependencies(location=location) - yield cls(dependencies=dependencies) + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies, + ) def get_requirements_txt_dependencies(location): @@ -427,25 +702,6 @@ def get_requirements_txt_dependencies(location): return dependent_packages -@attr.s() -class PythonPackage(PythonPackageData, models.Package): - """ - A Python Package that is created out of one/multiple python package - manifests. - """ - - @property - def manifests(self): - return [ - MetadataFile, - RequirementsFile, - PipfileLock, - DependencyFile, - SetupPy, - BinaryDistArchive, - SourceDistArchive - ] - def get_attribute(metainfo, name, multiple=False): """ @@ -541,7 +797,7 @@ def clean_description(description): def get_legacy_description(location): """ - Return the text of a legacy DESCRIPTION.rst. + Return the text of a legacy DESCRIPTION.rst file. """ location = os.path.join(location, 'DESCRIPTION.rst') if os.path.exists(location): @@ -569,8 +825,8 @@ def get_declared_license(metainfo): def get_classifiers(metainfo): """ - Return a two tuple of (license_classifiers, other_classifiers) found in a - ``metainfo`` object or mapping. + Return a two tuple of lists of (license_classifiers, other_classifiers) + found in a ``metainfo`` object or mapping. """ classifiers = ( @@ -647,8 +903,14 @@ def get_setup_py_dependencies(setup_args): setup.py arguments or an empty list. """ dependencies = [] + + python_requires = setup_args.get('python_requires') + if python_requires: + # FIXME: handle python_requires = >=3.6.* + pass + install_requires = setup_args.get('install_requires') - dependencies.extend(get_requires_dependencies(install_requires)) + dependencies.extend(get_requires_dependencies(install_requires, default_scope='install')) tests_requires = setup_args.get('tests_requires') dependencies.extend( @@ -697,6 +959,7 @@ def get_requires_dependencies(requires, default_scope='install'): requirement strings or an empty list. """ if not is_simple_requires(requires): + # FIXME: when does this happen? should we log this? return [] dependent_packages = [] for req in (requires or []): @@ -766,49 +1029,6 @@ def get_extra(marker): return value.value -def is_requirements_file(location): - """ - Return True if the ``location`` is likely for a pip requirements file. - - For example:: - >>> is_requirements_file('dev-requirements.txt') - True - >>> is_requirements_file('requirements.txt') - True - >>> is_requirements_file('requirement.txt') - True - >>> is_requirements_file('requirements.in') - True - >>> is_requirements_file('requirements.pip') - True - >>> is_requirements_file('requirements-dev.txt') - True - >>> is_requirements_file('some-requirements-dev.txt') - True - >>> is_requirements_file('requires.txt') - True - >>> is_requirements_file('requirements/base.txt') - True - >>> is_requirements_file('reqs.txt') - False - """ - filename = fileutils.file_name(location) - req_files = ( - '*requirement*.txt', - '*requirement*.pip', - '*requirement*.in', - 'requires.txt', - ) - is_req = any(fnmatch.fnmatchcase(filename, rf) for rf in req_files) - if is_req: - return True - - parent = fileutils.parent_directory(location) - parent_name = fileutils.file_name(parent) - pip_extensions = ('.txt', 'pip', '.in',) - return parent_name == 'requirements' and filename.endswith(pip_extensions) - - def get_dparse2_supported_file_name(file_name): """ Return the file_name if this is supported or None given a `file_name` @@ -820,7 +1040,6 @@ def get_dparse2_supported_file_name(file_name): 'Pipfile', 'conda.yml', 'setup.cfg', - 'tox.ini', ) for dfile_name in dfile_names: @@ -930,10 +1149,36 @@ def get_setup_py_args(location): return setup_args -def get_urls(metainfo): +def get_pypi_urls(name, version): + """ + Return a mapping of computed Pypi URLs for this package + """ + api_data_url = None + if name and version: + api_data_url = f'https://pypi.org/pypi/{name}/{version}/json' + else: + api_data_url = name and f'https://pypi.org/pypi/{name}/json' + + repository_download_url = ( + name + and version + and f'https://pypi.org/packages/source/{name[0]}/{name}/{name}-{version}.tar.gz' + ) + + repository_homepage_url = name and f'https://pypi.org/project/{name}' + + return dict( + repository_homepage_url=repository_homepage_url, + repository_download_url=repository_download_url, + api_data_url=api_data_url, + ) + + +def get_urls(metainfo, name, version, extra_data=None): """ - Return a mapping of Package URLs and a mapping of other URLs collected from - metainfo. + Return a mapping for URLs of this package: + - as plain name/values for URL attributes known in PackageData + - as a nested extra_data: mapping for other URLs (possibly updating extra_data if provided). """ # Misc URLs to possibly track # Project-URL: Release notes @@ -969,19 +1214,19 @@ def get_urls(metainfo): # Project-URL: Twine source # Project-URL: Say Thanks! - urls = {} - other_urls = {} + extra_data = extra_data or {} + urls = get_pypi_urls(name, version) def add_url(_url, _utype=None, _attribute=None): """ - Add ``_url`` to ``urls`` as _``_attribute`` or to ``other_urls`` as + Add ``_url`` to ``urls`` as _``_attribute`` or to ``extra_data`` as ``_utype`` if already defined or no ``_attribute`` is provided. """ if _url: if _attribute and _attribute not in urls: urls[_attribute] = _url elif _utype: - other_urls[_utype] = _url + extra_data[_utype] = _url # get first as this is the most common one homepage_url = ( @@ -1019,7 +1264,7 @@ def add_url(_url, _utype=None, _attribute=None): ): add_url(url, _utype=utype, _attribute='code_view_url') - elif utypel in ('github: repo', 'repository'): + elif utypel in ('github', 'gitlab', 'github: repo', 'repository'): add_url(url, _utype=utype, _attribute='vcs_url') elif utypel in ('website', 'homepage', 'home',): @@ -1029,11 +1274,13 @@ def add_url(_url, _utype=None, _attribute=None): add_url(url, _utype=utype) # FIXME: this may not be the actual correct package download URL, so for now - # we incorrectly set this as the vcs_url + # we incorrectly set this as the vcs_url download_url = get_attribute(metainfo, 'Download-URL') add_url(download_url, _utype='Download-URL', _attribute='vcs_url') - return urls, other_urls + if extra_data: + urls['extra_data'] = extra_data + return urls def find_pattern(location, pattern): diff --git a/tests/packagedcode/data/pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json b/tests/packagedcode/data/pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json index cda84d97a5d..6868b7809dc 100644 --- a/tests/packagedcode/data/pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json +++ b/tests/packagedcode/data/pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json @@ -38,7 +38,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -46,13 +46,60 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "atomicwrites/__init__.py", + "size": 6428, + "sha1": null, + "md5": null, + "sha256": "e99fd5a033165d8a870e730383a30199798cc5fd31194cec120b616d8f59c71c", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/METADATA", + "size": 5535, + "sha1": null, + "md5": null, + "sha256": "0289c810b3daea2a81801eac17154b464b8eb7b34c5ae2c8de6706d18205a358", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "81dbae3f206f149412434cddcb117b934cf29c35db21bbe0e59047a17ba6e6e9", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/top_level.txt", + "size": 13, + "sha1": null, + "md5": null, + "sha256": "92ceb8cca55492b97666bacfd38e82b32b5795219ff202c6f887285e93727a87", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/atomicwrites@1.2.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/atomicwrites", "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json" + "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json", + "datasource_id": "pypi_wheel", + "purl": "pkg:pypi/atomicwrites@1.2.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/archive/commoncode-21.5.12-py3.9.egg-expected.json b/tests/packagedcode/data/pypi/archive/commoncode-21.5.12-py3.9.egg-expected.json index ded69e4fd35..31e3decdf7b 100644 --- a/tests/packagedcode/data/pypi/archive/commoncode-21.5.12-py3.9.egg-expected.json +++ b/tests/packagedcode/data/pypi/archive/commoncode-21.5.12-py3.9.egg-expected.json @@ -44,8 +44,27 @@ "license": "Apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "src/commoncode/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": ".", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -166,9 +185,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/commoncode@21.5.12", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/commoncode", "repository_download_url": "https://pypi.org/packages/source/c/commoncode/commoncode-21.5.12.tar.gz", - "api_data_url": "https://pypi.org/pypi/commoncode/21.5.12/json" + "api_data_url": "https://pypi.org/pypi/commoncode/21.5.12/json", + "datasource_id": "pypi_egg", + "purl": "pkg:pypi/commoncode@21.5.12" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/develop/scancode_toolkit.egg-info-expected.json b/tests/packagedcode/data/pypi/develop/scancode_toolkit.egg-info-expected.json index d3698ec7503..f9ef9fd1336 100644 --- a/tests/packagedcode/data/pypi/develop/scancode_toolkit.egg-info-expected.json +++ b/tests/packagedcode/data/pypi/develop/scancode_toolkit.egg-info-expected.json @@ -50,13 +50,1031 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft", + "license_expression": "(apache-2.0 AND cc-by-4.0) AND unknown", "declared_license": { "license": "Apache-2.0 AND CC-BY-4.0 AND LicenseRef-scancode-other-permissive AND LicenseRef-scancode-other-copyleft" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": ".VERSION", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "AUTHORS.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "CHANGELOG.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "CODE_OF_CONDUCT.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "CONTRIBUTING.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "Dockerfile", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "INSTALL.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "MANIFEST.in", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "NOTICE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "README.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "apache-2.0.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "cc-by-4.0.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "configure", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "configure.bat", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "extractcode", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "extractcode.bat", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "origin.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pyproject.toml", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "requirements-dev.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "requirements.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "scancode", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "scancode-toolkit-licenses.tar.gz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "scancode-toolkit.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "scancode.bat", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "setup.cfg", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "setup.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/configure.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/apache-2.0.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/bsd-new.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/bsd-simplified.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/isc.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/lgpl-2.1-plus.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/mit.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/python.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/virtualenv.pyz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "etc/thirdparty/virtualenv.pyz.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/scancode_config.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/copyrights.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/copyrights_hint.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/finder.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/finder_data.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/plugin_copyright.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/plugin_email.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/plugin_filter_clues.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/plugin_ignore_copyrights.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/cluecode/plugin_url.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_csv.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_debian.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_html.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_json.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_jsonlines.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/output_spdx.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html/template.html", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/help_template.html", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/template.html", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/32px.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/DataTables.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/DataTables.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bootstrap-fonts.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bootstrap.min.css", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bootstrap.min.css.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bootstrap.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bootstrap.min.js.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/bsd-new.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/chart.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/d3.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/d3.min.js.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/d3.min.js.NOTICE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/html5shiv.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/html5shiv.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/html5shiv.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jquery.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jquery.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jquery.dataTables.min.css", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jquery.dataTables.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jquery.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jstree.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jstree.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/jstree.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/main.css", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/mit.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/respond.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/respond.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/respond.min.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/scancode_datatable.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/scancode_jstree.js", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/simple-sidebar.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/simple-sidebar.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/simple-sidebar.css", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/style.min.css", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/throbber.gif", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/fonts/glyphicons-halflings-regular.eot", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/fonts/glyphicons-halflings-regular.svg", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/fonts/glyphicons-halflings-regular.ttf", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/fonts/glyphicons-halflings-regular.woff", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/fonts/glyphicons-halflings-regular.woff2", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/Sorting icons.psd", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/favicon.ico", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/sort_asc.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/sort_asc_disabled.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/sort_both.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/sort_desc.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/formattedcode/templates/html-app/assets/images/sort_desc_disabled.png", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/README.rst", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/cache.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/dmp.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/dmp.py.ABOUT", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/dmp.py.LICENSE", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/index.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "src/licensedcode/legal.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -546,9 +1564,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/scancode-toolkit@21.3.31", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/scancode-toolkit", "repository_download_url": "https://pypi.org/packages/source/s/scancode-toolkit/scancode-toolkit-21.3.31.tar.gz", - "api_data_url": "https://pypi.org/pypi/scancode-toolkit/21.3.31/json" + "api_data_url": "https://pypi.org/pypi/scancode-toolkit/21.3.31/json", + "datasource_id": "pypi_editable_egg_pkginfo", + "purl": "pkg:pypi/scancode-toolkit@21.3.31" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/dist-info-metadata/METADATA-expected.json b/tests/packagedcode/data/pypi/dist-info-metadata/METADATA-expected.json new file mode 100644 index 00000000000..b7a55f10886 --- /dev/null +++ b/tests/packagedcode/data/pypi/dist-info-metadata/METADATA-expected.json @@ -0,0 +1,57 @@ +[ + { + "type": "pypi", + "namespace": null, + "name": "six", + "version": "1.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "Python 2 and 3 compatibility utilities\nSix is a Python 2 and 3 compatibility library. It provides utility functions\nfor smoothing over the differences between the Python versions with the goal of\nwriting Python code that is compatible on both Python versions. See the\ndocumentation for more information on what is provided.\n\nSix supports every Python version since 2.6. It is contained in only one Python\nfile, so it can be easily copied into your project. (The copyright and license\nnotice must be retained.)\n\nOnline documentation is at https://pythonhosted.org/six/.\n\nBugs can be reported to https://bitbucket.org/gutworth/six. The code can also\nbe found there.\n\nFor questions about six or porting in general, email the python-porting mailing\nlist: https://mail.python.org/mailman/listinfo/python-porting", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Benjamin Peterson", + "email": "benjamin@python.org", + "url": null + } + ], + "keywords": [ + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 3", + "Intended Audience :: Developers", + "Topic :: Software Development :: Libraries", + "Topic :: Utilities" + ], + "homepage_url": "http://pypi.python.org/pypi/six/", + "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, + "license_expression": "mit AND mit", + "declared_license": { + "license": "MIT", + "classifiers": [ + "License :: OSI Approved :: MIT License" + ] + }, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://pypi.org/project/six", + "repository_download_url": "https://pypi.org/packages/source/s/six/six-1.10.0.tar.gz", + "api_data_url": "https://pypi.org/pypi/six/1.10.0/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/six@1.10.0" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/METADATA b/tests/packagedcode/data/pypi/dist-info-metadata/scan/.dist-info/METADATA similarity index 100% rename from tests/packagedcode/data/pypi/metadata/METADATA rename to tests/packagedcode/data/pypi/dist-info-metadata/scan/.dist-info/METADATA diff --git a/tests/packagedcode/data/pypi/metadata/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/PKG-INFO-expected.json index 6c4f3dfe155..9a403b9a93b 100644 --- a/tests/packagedcode/data/pypi/metadata/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/PKG-INFO-expected.json @@ -46,13 +46,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/python-mimeparse@1.6.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/python-mimeparse", "repository_download_url": "https://pypi.org/packages/source/p/python-mimeparse/python-mimeparse-1.6.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json" + "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/python-mimeparse@1.6.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA b/tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA new file mode 100644 index 00000000000..4fc3d07c600 --- /dev/null +++ b/tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA @@ -0,0 +1,34 @@ +Metadata-Version: 2.0 +Name: six +Version: 1.10.0 +Summary: Python 2 and 3 compatibility utilities +Home-page: http://pypi.python.org/pypi/six/ +Author: Benjamin Peterson +Author-email: benjamin@python.org +License: MIT +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 3 +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Libraries +Classifier: Topic :: Utilities + +Six is a Python 2 and 3 compatibility library. It provides utility functions +for smoothing over the differences between the Python versions with the goal of +writing Python code that is compatible on both Python versions. See the +documentation for more information on what is provided. + +Six supports every Python version since 2.6. It is contained in only one Python +file, so it can be easily copied into your project. (The copyright and license +notice must be retained.) + +Online documentation is at https://pythonhosted.org/six/. + +Bugs can be reported to https://bitbucket.org/gutworth/six. The code can also +be found there. + +For questions about six or porting in general, email the python-porting mailing +list: https://mail.python.org/mailman/listinfo/python-porting + + diff --git a/tests/packagedcode/data/pypi/metadata/METADATA-expected.json b/tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA-expected.json similarity index 90% rename from tests/packagedcode/data/pypi/metadata/METADATA-expected.json rename to tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA-expected.json index 3082ee4535d..370b4a620fa 100644 --- a/tests/packagedcode/data/pypi/metadata/METADATA-expected.json +++ b/tests/packagedcode/data/pypi/metadata/metadata.dist-info/METADATA-expected.json @@ -44,13 +44,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/six@1.10.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/six", "repository_download_url": "https://pypi.org/packages/source/s/six/six-1.10.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/six/1.10.0/json" + "api_data_url": "https://pypi.org/pypi/six/1.10.0/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/six@1.10.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v10/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v10/PKG-INFO-expected.json index 5e4c4fa736a..d0aba6cef6a 100644 --- a/tests/packagedcode/data/pypi/metadata/v10/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/v10/PKG-INFO-expected.json @@ -35,13 +35,14 @@ "license": "LICENSE.txt" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/prompt-toolkit@0.53.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/prompt-toolkit", "repository_download_url": "https://pypi.org/packages/source/p/prompt-toolkit/prompt-toolkit-0.53.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/prompt-toolkit/0.53.1/json" + "api_data_url": "https://pypi.org/pypi/prompt-toolkit/0.53.1/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/prompt-toolkit@0.53.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v11/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v11/PKG-INFO-expected.json index 6c4f3dfe155..9a403b9a93b 100644 --- a/tests/packagedcode/data/pypi/metadata/v11/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/v11/PKG-INFO-expected.json @@ -46,13 +46,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/python-mimeparse@1.6.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/python-mimeparse", "repository_download_url": "https://pypi.org/packages/source/p/python-mimeparse/python-mimeparse-1.6.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json" + "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/python-mimeparse@1.6.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v12/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v12/PKG-INFO-expected.json index 60b67afca8c..d7ae7c24747 100644 --- a/tests/packagedcode/data/pypi/metadata/v12/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/v12/PKG-INFO-expected.json @@ -51,7 +51,7 @@ "code_view_url": null, "vcs_url": "https://pypi.python.org/pypi/pyldap/", "copyright": null, - "license_expression": "unknown AND python", + "license_expression": "python AND python", "declared_license": { "license": "Python style", "classifiers": [ @@ -59,13 +59,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/pyldap@2.4.45", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pyldap", "repository_download_url": "https://pypi.org/packages/source/p/pyldap/pyldap-2.4.45.tar.gz", - "api_data_url": "https://pypi.org/pypi/pyldap/2.4.45/json" + "api_data_url": "https://pypi.org/pypi/pyldap/2.4.45/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/pyldap@2.4.45" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v20/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v20/PKG-INFO-expected.json index e1b35ba1d5a..45a423392be 100644 --- a/tests/packagedcode/data/pypi/metadata/v20/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/v20/PKG-INFO-expected.json @@ -51,7 +51,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND apache-2.0", "declared_license": { "license": "Apache License, Version 2.0", "classifiers": [ @@ -59,8 +59,8 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -91,9 +91,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/pymongo@3.6.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pymongo", "repository_download_url": "https://pypi.org/packages/source/p/pymongo/pymongo-3.6.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/pymongo/3.6.1/json" + "api_data_url": "https://pypi.org/pypi/pymongo/3.6.1/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/pymongo@3.6.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v21/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v21/PKG-INFO-expected.json index 185a0a7f8f0..1b05665d0b7 100644 --- a/tests/packagedcode/data/pypi/metadata/v21/PKG-INFO-expected.json +++ b/tests/packagedcode/data/pypi/metadata/v21/PKG-INFO-expected.json @@ -51,13 +51,16 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [], + "extra_data": { + "Documentation": "Documentation, https://docs.openstack.org/pbr/" + }, "dependencies": [], - "purl": "pkg:pypi/pbr@4.0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pbr", "repository_download_url": "https://pypi.org/packages/source/p/pbr/pbr-4.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/pbr/4.0.1/json" + "api_data_url": "https://pypi.org/pypi/pbr/4.0.1/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/pbr@4.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample1/Pipfile.lock-expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample1/Pipfile.lock-expected.json index 3e05e7f3ab9..b0e0ea1e142 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample1/Pipfile.lock-expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample1/Pipfile.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -111,9 +111,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample1/output.expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample1/output.expected.json index 535d08d85a1..7b9a6ac2bf3 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample1/output.expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample1/output.expected.json @@ -24,7 +24,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:pypi/django@1.7.1", @@ -99,7 +98,6 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample2/Pipfile.lock-expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample2/Pipfile.lock-expected.json index 7c91fdb8661..df5b95dbce7 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample2/Pipfile.lock-expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample2/Pipfile.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -183,9 +183,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample2/output.expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample2/output.expected.json index 477e71760cb..ac82559237c 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample2/output.expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample2/output.expected.json @@ -24,7 +24,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:pypi/atomicwrites@1.1.5", @@ -163,7 +162,6 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample3/Pipfile.lock-expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample3/Pipfile.lock-expected.json index 3ada4908e9f..208dcca20fd 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample3/Pipfile.lock-expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample3/Pipfile.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample3/output.expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample3/output.expected.json index 7579c989e5c..2aa262bade3 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample3/output.expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample3/output.expected.json @@ -24,7 +24,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:pypi/python-baseconv@1.2.2", @@ -35,7 +34,6 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample4/Pipfile.lock-expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample4/Pipfile.lock-expected.json index 2c06aba7e82..19c005249e2 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample4/Pipfile.lock-expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample4/Pipfile.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -147,9 +147,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample4/output.expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample4/output.expected.json index a4ca3b3dc7c..129e4229686 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample4/output.expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample4/output.expected.json @@ -24,7 +24,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:pypi/functools32@3.2.3.post2", @@ -131,7 +130,6 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample5/Pipfile.lock-expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample5/Pipfile.lock-expected.json index 3e05e7f3ab9..b0e0ea1e142 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample5/Pipfile.lock-expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample5/Pipfile.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -111,9 +111,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/pipfile.lock/sample5/output.expected.json b/tests/packagedcode/data/pypi/pipfile.lock/sample5/output.expected.json index 535d08d85a1..7b9a6ac2bf3 100644 --- a/tests/packagedcode/data/pypi/pipfile.lock/sample5/output.expected.json +++ b/tests/packagedcode/data/pypi/pipfile.lock/sample5/output.expected.json @@ -24,7 +24,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": null, "dependencies": [ { "purl": "pkg:pypi/django@1.7.1", @@ -99,7 +98,6 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, diff --git a/tests/packagedcode/data/pypi/requirements_txt/basic/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/basic/output.expected.json index 4ab1edc6589..725a473824a 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/basic/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/basic/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/comments_and_empties/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/comments_and_empties/output.expected.json index 2fa884d6530..11c49398b06 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/comments_and_empties/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/comments_and_empties/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/complex/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/complex/output.expected.json index c9f697883b4..fe2ab3f4911 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/complex/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/complex/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,9 +66,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/dev/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/dev/output.expected.json index f81e23f1f41..e116b523930 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/dev/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/dev/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/double_extras/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/double_extras/output.expected.json index 9e5d65156ff..439fc88f549 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/double_extras/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/double_extras/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/editable/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/editable/output.expected.json index b47298b1e03..491e5dff246 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/editable/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/editable/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,9 +66,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/eol_comment/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/eol_comment/output.expected.json index 2357a632727..a40cfae936c 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/eol_comment/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/eol_comment/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/invalid_spec/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/invalid_spec/output.expected.json index 17955693993..5b784721640 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/invalid_spec/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/invalid_spec/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/local_paths_and_files/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/local_paths_and_files/output.expected.json index fff625a5aa3..038ba1b746d 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/local_paths_and_files/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/local_paths_and_files/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,9 +66,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/many_specs/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/many_specs/output.expected.json index ea08abd46cf..3a769c0a639 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/many_specs/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/many_specs/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/mixed/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/mixed/output.expected.json index 65dd479d84f..0c0490e1295 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/mixed/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/mixed/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -66,9 +66,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/pinned/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/pinned/output.expected.json index cafde6781ac..73ed5f04f81 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/pinned/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/pinned/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/repeated/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/repeated/output.expected.json index 056dd7b5756..0b7b932ed2a 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/repeated/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/repeated/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/requirements_in/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/requirements_in/output.expected.json index a2076872815..8d794572724 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/requirements_in/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/requirements_in/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/urls_wth_checksums/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/urls_wth_checksums/output.expected.json index 42aaf4333d6..54d6195e594 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/urls_wth_checksums/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/urls_wth_checksums/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/vcs-git/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/vcs-git/output.expected.json index 1d0166ab4cb..8c25c965aba 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/vcs-git/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/vcs-git/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -147,9 +147,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/vcs_editable/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/vcs_editable/output.expected.json index 0b1bc529ede..924ed6b89fe 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/vcs_editable/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/vcs_editable/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -138,9 +138,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/vcs_eggs/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/vcs_eggs/output.expected.json index d8a200a7a7e..3ace43142b4 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/vcs_eggs/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/vcs_eggs/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -48,9 +48,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/requirements_txt/vcs_extras_require/output.expected.json b/tests/packagedcode/data/pypi/requirements_txt/vcs_extras_require/output.expected.json index 972792454da..f19929ba240 100644 --- a/tests/packagedcode/data/pypi/requirements_txt/vcs_extras_require/output.expected.json +++ b/tests/packagedcode/data/pypi/requirements_txt/vcs_extras_require/output.expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -39,9 +39,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py-versions/asyncio-master/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/asyncio-master/setup.py-expected.json index 1a561080724..368c2eed701 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/asyncio-master/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/asyncio-master/setup.py-expected.json @@ -31,9 +31,7 @@ "classifiers": [] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/asyncio@3.4.4", "repository_homepage_url": "https://pypi.org/project/asyncio", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/certifi-2020.6.20/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/certifi-2020.6.20/setup.py-expected.json index e469fad0c7a..dd38fd28989 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/certifi-2020.6.20/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/certifi-2020.6.20/setup.py-expected.json @@ -49,9 +49,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/certifi@2020.06.20", "repository_homepage_url": "https://pypi.org/project/certifi", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/chardet-3.0.4/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/chardet-3.0.4/setup.py-expected.json index d60bf6f6974..f139ac63d8d 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/chardet-3.0.4/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/chardet-3.0.4/setup.py-expected.json @@ -52,9 +52,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/chardet@3.0.4", "repository_homepage_url": "https://pypi.org/project/chardet", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/flit-2.3.0/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/flit-2.3.0/setup.py-expected.json index 78027a35603..acf83c7e405 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/flit-2.3.0/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/flit-2.3.0/setup.py-expected.json @@ -35,9 +35,7 @@ "classifiers": [] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/flit@2.3.0", "repository_homepage_url": "https://pypi.org/project/flit", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/paho-mqtt-1.5.0/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/paho-mqtt-1.5.0/setup.py-expected.json index 3b6d5acedc3..361a596ef28 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/paho-mqtt-1.5.0/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/paho-mqtt-1.5.0/setup.py-expected.json @@ -53,9 +53,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/paho-mqtt@1.5.0", "repository_homepage_url": "https://pypi.org/project/paho-mqtt", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/pexpect-4.6.0/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/pexpect-4.6.0/setup.py-expected.json index b2c36908d53..9be8503d15a 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/pexpect-4.6.0/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/pexpect-4.6.0/setup.py-expected.json @@ -57,9 +57,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/pexpect@4.6.0", "repository_homepage_url": "https://pypi.org/project/pexpect", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/pycparser-2.20/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/pycparser-2.20/setup.py-expected.json index 459cc1327cd..db71d8ada9d 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/pycparser-2.20/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/pycparser-2.20/setup.py-expected.json @@ -45,9 +45,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/pycparser@2.20", "repository_homepage_url": "https://pypi.org/project/pycparser", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/pyserial-3.4/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/pyserial-3.4/setup.py-expected.json index 14a43c50144..73e763618de 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/pyserial-3.4/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/pyserial-3.4/setup.py-expected.json @@ -58,9 +58,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/pyserial@3.4", "repository_homepage_url": "https://pypi.org/project/pyserial", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/pytoml-0.1.21/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/pytoml-0.1.21/setup.py-expected.json index 22fa7f933b8..fc6d4b86f06 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/pytoml-0.1.21/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/pytoml-0.1.21/setup.py-expected.json @@ -45,9 +45,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/pytoml@0.1.21", "repository_homepage_url": "https://pypi.org/project/pytoml", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/six-1.14.0/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/six-1.14.0/setup.py-expected.json index d21890b1158..8d46d921a0a 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/six-1.14.0/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/six-1.14.0/setup.py-expected.json @@ -35,9 +35,7 @@ "classifiers": [] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/six@1.14.0", "repository_homepage_url": "https://pypi.org/project/six", diff --git a/tests/packagedcode/data/pypi/setup.py-versions/urllib3-1.25.9/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py-versions/urllib3-1.25.9/setup.py-expected.json index 9a8b70b8e96..03e317cfd31 100644 --- a/tests/packagedcode/data/pypi/setup.py-versions/urllib3-1.25.9/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py-versions/urllib3-1.25.9/setup.py-expected.json @@ -54,9 +54,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/urllib3@1.25.9", "repository_homepage_url": "https://pypi.org/project/urllib3", diff --git a/tests/packagedcode/data/pypi/setup.py/arpy_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/arpy_setup.py-expected.json index 8ab9ae110d5..249b30df150 100644 --- a/tests/packagedcode/data/pypi/setup.py/arpy_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/arpy_setup.py-expected.json @@ -35,13 +35,14 @@ "license": "Simplified BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/arpy@0.1.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/arpy", "repository_download_url": "https://pypi.org/packages/source/a/arpy/arpy-0.1.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json" + "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/arpy@0.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/boolean2_py_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/boolean2_py_setup.py-expected.json index d6e4e6610f2..75b5b98046e 100644 --- a/tests/packagedcode/data/pypi/setup.py/boolean2_py_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/boolean2_py_setup.py-expected.json @@ -53,13 +53,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/boolean.py@1.2", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/boolean.py", "repository_download_url": "https://pypi.org/packages/source/b/boolean.py/boolean.py-1.2.tar.gz", - "api_data_url": "https://pypi.org/pypi/boolean.py/1.2/json" + "api_data_url": "https://pypi.org/pypi/boolean.py/1.2/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/boolean.py@1.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/container_check_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/container_check_setup.py-expected.json index caccf10d540..4fa4b75d844 100644 --- a/tests/packagedcode/data/pypi/setup.py/container_check_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/container_check_setup.py-expected.json @@ -49,13 +49,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/container-check@1.0.6", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/container-check", "repository_download_url": "https://pypi.org/packages/source/c/container-check/container-check-1.0.6.tar.gz", - "api_data_url": "https://pypi.org/pypi/container-check/1.0.6/json" + "api_data_url": "https://pypi.org/pypi/container-check/1.0.6/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/container-check@1.0.6" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/fb303_py_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/fb303_py_setup.py-expected.json index dd761f7d922..5f134f833b7 100644 --- a/tests/packagedcode/data/pypi/setup.py/fb303_py_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/fb303_py_setup.py-expected.json @@ -45,13 +45,14 @@ "license": "Apache License 2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/thrift-fb303@0.10.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/thrift_fb303", "repository_download_url": "https://pypi.org/packages/source/t/thrift_fb303/thrift_fb303-0.10.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/thrift_fb303/0.10.0/json" + "api_data_url": "https://pypi.org/pypi/thrift_fb303/0.10.0/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/thrift-fb303@0.10.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/frell_src_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/frell_src_setup.py-expected.json index 4a38302265b..f25ef2211db 100644 --- a/tests/packagedcode/data/pypi/setup.py/frell_src_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/frell_src_setup.py-expected.json @@ -35,13 +35,14 @@ "license": "Apache License 2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/%40name%40", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/@NAME@", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/@NAME@/json" + "api_data_url": "https://pypi.org/pypi/@NAME@/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/%40name%40" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/gyp_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/gyp_setup.py-expected.json index 51fc7343715..e98a9babcd3 100644 --- a/tests/packagedcode/data/pypi/setup.py/gyp_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/gyp_setup.py-expected.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/gyp@0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/gyp", "repository_download_url": "https://pypi.org/packages/source/g/gyp/gyp-0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/gyp/0.1/json" + "api_data_url": "https://pypi.org/pypi/gyp/0.1/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/gyp@0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/interlap_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/interlap_setup.py-expected.json index 1297e9922ca..9fec073f235 100644 --- a/tests/packagedcode/data/pypi/setup.py/interlap_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/interlap_setup.py-expected.json @@ -49,13 +49,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/interlap", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/interlap", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/interlap/json" + "api_data_url": "https://pypi.org/pypi/interlap/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/interlap" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/mb_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/mb_setup.py-expected.json index 7ededce536b..b9dc63d7788 100644 --- a/tests/packagedcode/data/pypi/setup.py/mb_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/mb_setup.py-expected.json @@ -35,13 +35,14 @@ "license": "GPLv2" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/mb@2.19.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/mb", "repository_download_url": "https://pypi.org/packages/source/m/mb/mb-2.19.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/mb/2.19.0/json" + "api_data_url": "https://pypi.org/pypi/mb/2.19.0/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/mb@2.19.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/ntfs_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/ntfs_setup.py-expected.json index f93e25d57fb..0359f58f47f 100644 --- a/tests/packagedcode/data/pypi/setup.py/ntfs_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/ntfs_setup.py-expected.json @@ -46,13 +46,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/ntfsutils", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/ntfsutils", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/ntfsutils/json" + "api_data_url": "https://pypi.org/pypi/ntfsutils/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/ntfsutils" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/nvchecker_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/nvchecker_setup.py-expected.json index cfa9fd96733..6a9a8ba3c4d 100644 --- a/tests/packagedcode/data/pypi/setup.py/nvchecker_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/nvchecker_setup.py-expected.json @@ -56,8 +56,8 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -79,9 +79,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/nvchecker", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/nvchecker", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/nvchecker/json" + "api_data_url": "https://pypi.org/pypi/nvchecker/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/nvchecker" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/oi_agents_common_code_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/oi_agents_common_code_setup.py-expected.json index 214c9832b79..aed0e04678b 100644 --- a/tests/packagedcode/data/pypi/setup.py/oi_agents_common_code_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/oi_agents_common_code_setup.py-expected.json @@ -48,13 +48,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/agents-common", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/agents_common", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/agents_common/json" + "api_data_url": "https://pypi.org/pypi/agents_common/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/agents-common" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/packageurl_python_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/packageurl_python_setup.py-expected.json index cad2dcfe0e8..2f4328327f7 100644 --- a/tests/packagedcode/data/pypi/setup.py/packageurl_python_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/packageurl_python_setup.py-expected.json @@ -53,13 +53,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/packageurl-python@0.8.5", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/packageurl-python", "repository_download_url": "https://pypi.org/packages/source/p/packageurl-python/packageurl-python-0.8.5.tar.gz", - "api_data_url": "https://pypi.org/pypi/packageurl-python/0.8.5/json" + "api_data_url": "https://pypi.org/pypi/packageurl-python/0.8.5/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/packageurl-python@0.8.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/pipdeptree_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/pipdeptree_setup.py-expected.json index b027759c298..92f512c5b55 100644 --- a/tests/packagedcode/data/pypi/setup.py/pipdeptree_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/pipdeptree_setup.py-expected.json @@ -48,13 +48,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/pipdeptree", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pipdeptree", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/pipdeptree/json" + "api_data_url": "https://pypi.org/pypi/pipdeptree/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/pipdeptree" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/pluggy_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/pluggy_setup.py-expected.json index dd5d7a351f0..20219bff27e 100644 --- a/tests/packagedcode/data/pypi/setup.py/pluggy_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/pluggy_setup.py-expected.json @@ -25,13 +25,14 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_py", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/pydep_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/pydep_setup.py-expected.json index 8403e72b009..85fcddea437 100644 --- a/tests/packagedcode/data/pypi/setup.py/pydep_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/pydep_setup.py-expected.json @@ -33,8 +33,8 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -47,9 +47,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/pydep@0.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pydep", "repository_download_url": "https://pypi.org/packages/source/p/pydep/pydep-0.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/pydep/0.0/json" + "api_data_url": "https://pypi.org/pypi/pydep/0.0/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/pydep@0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/pygtrie_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/pygtrie_setup.py-expected.json index dd5d7a351f0..20219bff27e 100644 --- a/tests/packagedcode/data/pypi/setup.py/pygtrie_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/pygtrie_setup.py-expected.json @@ -25,13 +25,14 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_py", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/pyrpm_2_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/pyrpm_2_setup.py-expected.json index 9764c8186c4..375ed5a1082 100644 --- a/tests/packagedcode/data/pypi/setup.py/pyrpm_2_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/pyrpm_2_setup.py-expected.json @@ -50,13 +50,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/pyrpm-02strich@0.5.3", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pyrpm-02strich", "repository_download_url": "https://pypi.org/packages/source/p/pyrpm-02strich/pyrpm-02strich-0.5.3.tar.gz", - "api_data_url": "https://pypi.org/pypi/pyrpm-02strich/0.5.3/json" + "api_data_url": "https://pypi.org/pypi/pyrpm-02strich/0.5.3/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/pyrpm-02strich@0.5.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/python_publicsuffix_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/python_publicsuffix_setup.py-expected.json index ed0eef9668b..3244826ac11 100644 --- a/tests/packagedcode/data/pypi/setup.py/python_publicsuffix_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/python_publicsuffix_setup.py-expected.json @@ -43,13 +43,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/publicsuffix@1.1.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/publicsuffix", "repository_download_url": "https://pypi.org/packages/source/p/publicsuffix/publicsuffix-1.1.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/publicsuffix/1.1.1/json" + "api_data_url": "https://pypi.org/pypi/publicsuffix/1.1.1/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/publicsuffix@1.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/repology_py_libversion_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/repology_py_libversion_setup.py-expected.json index cb24dd8fb49..021a3c86fdc 100644 --- a/tests/packagedcode/data/pypi/setup.py/repology_py_libversion_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/repology_py_libversion_setup.py-expected.json @@ -48,13 +48,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/libversion", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/libversion", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/libversion/json" + "api_data_url": "https://pypi.org/pypi/libversion/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/libversion" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/saneyaml_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/saneyaml_setup.py-expected.json index 00c415e42f5..6050d2fbd6d 100644 --- a/tests/packagedcode/data/pypi/setup.py/saneyaml_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/saneyaml_setup.py-expected.json @@ -53,8 +53,8 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -67,9 +67,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/saneyaml@0.2dev", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/saneyaml", "repository_download_url": "https://pypi.org/packages/source/s/saneyaml/saneyaml-0.2dev.tar.gz", - "api_data_url": "https://pypi.org/pypi/saneyaml/0.2dev/json" + "api_data_url": "https://pypi.org/pypi/saneyaml/0.2dev/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/saneyaml@0.2dev" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/setup.py-expected.json index 741372fb8fe..fb775c57f1f 100644 --- a/tests/packagedcode/data/pypi/setup.py/setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/setup.py-expected.json @@ -50,8 +50,8 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -244,9 +244,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/scancode-toolkit@1.5.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/scancode-toolkit", "repository_download_url": "https://pypi.org/packages/source/s/scancode-toolkit/scancode-toolkit-1.5.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/scancode-toolkit/1.5.0/json" + "api_data_url": "https://pypi.org/pypi/scancode-toolkit/1.5.0/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/scancode-toolkit@1.5.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/setup.py-simple-expected.json b/tests/packagedcode/data/pypi/setup.py/setup.py-simple-expected.json index 0f25f62eb88..7a65bc7b941 100644 --- a/tests/packagedcode/data/pypi/setup.py/setup.py-simple-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/setup.py-simple-expected.json @@ -49,9 +49,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:pypi/scancode-toolkit@1.5.0", "repository_homepage_url": "https://pypi.org/project/scancode-toolkit", diff --git a/tests/packagedcode/data/pypi/setup.py/setuppycheck_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/setuppycheck_setup.py-expected.json index 927a2ec726f..8657861425e 100644 --- a/tests/packagedcode/data/pypi/setup.py/setuppycheck_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/setuppycheck_setup.py-expected.json @@ -37,8 +37,8 @@ "license": "MIT" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -51,9 +51,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/setuppycheck", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/setuppycheck", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/setuppycheck/json" + "api_data_url": "https://pypi.org/pypi/setuppycheck/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/setuppycheck" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/url_py_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/url_py_setup.py-expected.json index b5e01179d9c..8160c7679a4 100644 --- a/tests/packagedcode/data/pypi/setup.py/url_py_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/url_py_setup.py-expected.json @@ -43,8 +43,8 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/urlpy@0.2.0.2", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/urlpy", "repository_download_url": "https://pypi.org/packages/source/u/urlpy/urlpy-0.2.0.2.tar.gz", - "api_data_url": "https://pypi.org/pypi/urlpy/0.2.0.2/json" + "api_data_url": "https://pypi.org/pypi/urlpy/0.2.0.2/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/urlpy@0.2.0.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/venv_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/venv_setup.py-expected.json index 97ace20dc7b..ccfa974baee 100644 --- a/tests/packagedcode/data/pypi/setup.py/venv_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/venv_setup.py-expected.json @@ -56,13 +56,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/virtualenv", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/virtualenv", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/virtualenv/json" + "api_data_url": "https://pypi.org/pypi/virtualenv/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/virtualenv" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/with_name-setup.py.expected.json b/tests/packagedcode/data/pypi/setup.py/with_name-setup.py.expected.json index 8ab9ae110d5..249b30df150 100644 --- a/tests/packagedcode/data/pypi/setup.py/with_name-setup.py.expected.json +++ b/tests/packagedcode/data/pypi/setup.py/with_name-setup.py.expected.json @@ -35,13 +35,14 @@ "license": "Simplified BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/arpy@0.1.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/arpy", "repository_download_url": "https://pypi.org/packages/source/a/arpy/arpy-0.1.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json" + "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/arpy@0.1.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/without_name-setup.py.expected.json b/tests/packagedcode/data/pypi/setup.py/without_name-setup.py.expected.json index 4854217f9db..daec2aa7e64 100644 --- a/tests/packagedcode/data/pypi/setup.py/without_name-setup.py.expected.json +++ b/tests/packagedcode/data/pypi/setup.py/without_name-setup.py.expected.json @@ -33,13 +33,14 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_py", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/setup.py/xmltodict_setup.py-expected.json b/tests/packagedcode/data/pypi/setup.py/xmltodict_setup.py-expected.json index 35684d5721a..235539d68ea 100644 --- a/tests/packagedcode/data/pypi/setup.py/xmltodict_setup.py-expected.json +++ b/tests/packagedcode/data/pypi/setup.py/xmltodict_setup.py-expected.json @@ -45,13 +45,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/xmltodict", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/xmltodict", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/xmltodict/json" + "api_data_url": "https://pypi.org/pypi/xmltodict/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/xmltodict" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpackage_source_parser-expected.json b/tests/packagedcode/data/pypi/unpackage_source_parser-expected.json index 993a67b6c27..27db5ddee91 100644 --- a/tests/packagedcode/data/pypi/unpackage_source_parser-expected.json +++ b/tests/packagedcode/data/pypi/unpackage_source_parser-expected.json @@ -34,9 +34,7 @@ "license": "BSD" }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": "pkg:pypi/ticketimport@0.7a", diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-expected.json index 1cebe35e57a..f7012754354 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-expected.json @@ -38,13 +38,14 @@ "license": "MIT" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/pyjpstring@0.0.3", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/PyJPString", "repository_download_url": "https://pypi.org/packages/source/P/PyJPString/PyJPString-0.0.3.tar.gz", - "api_data_url": "https://pypi.org/pypi/PyJPString/0.0.3/json" + "api_data_url": "https://pypi.org/pypi/PyJPString/0.0.3/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/pyjpstring@0.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-subdir-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-subdir-expected.json index 2e3e3b2a559..a611a88d286 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-subdir-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-subdir-expected.json @@ -38,8 +38,135 @@ "license": "MIT" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "setup.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "PyJPString.egg-info/PKG-INFO", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "PyJPString.egg-info/SOURCES.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "PyJPString.egg-info/dependency_links.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "PyJPString.egg-info/requires.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "PyJPString.egg-info/top_level.txt", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/converters.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/normalizers.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/patterns.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/string.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/validators.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/django/__init__.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jpstring/django/validators.py", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -79,9 +206,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/pyjpstring@0.0.3", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/PyJPString", "repository_download_url": "https://pypi.org/packages/source/P/PyJPString/PyJPString-0.0.3.tar.gz", - "api_data_url": "https://pypi.org/pypi/PyJPString/0.0.3/json" + "api_data_url": "https://pypi.org/pypi/PyJPString/0.0.3/json", + "datasource_id": "pypi_editable_egg_pkginfo", + "purl": "pkg:pypi/pyjpstring@0.0.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0-expected.json index 6c4f3dfe155..9a403b9a93b 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0-expected.json @@ -46,13 +46,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/python-mimeparse@1.6.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/python-mimeparse", "repository_download_url": "https://pypi.org/packages/source/p/python-mimeparse/python-mimeparse-1.6.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json" + "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/python-mimeparse@1.6.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0-expected.json index bbd96779322..016b07033df 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0-expected.json @@ -42,7 +42,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT license", "classifiers": [ @@ -50,13 +50,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/pyup-django@0.4.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pyup-django", "repository_download_url": "https://pypi.org/packages/source/p/pyup-django/pyup-django-0.4.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/pyup-django/0.4.0/json" + "api_data_url": "https://pypi.org/pypi/pyup-django/0.4.0/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/pyup-django@0.4.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19-expected.json index 5be5e7b5899..616c15bb060 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19-expected.json @@ -37,7 +37,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT license", "classifiers": [ @@ -45,13 +45,14 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/anonapi@0.0.19", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/anonapi", "repository_download_url": "https://pypi.org/packages/source/a/anonapi/anonapi-0.0.19.tar.gz", - "api_data_url": "https://pypi.org/pypi/anonapi/0.0.19/json" + "api_data_url": "https://pypi.org/pypi/anonapi/0.0.19/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/anonapi@0.0.19" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12-expected.json b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12-expected.json index e949f1ef0e9..05c4fd73e05 100644 --- a/tests/packagedcode/data/pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12-expected.json @@ -44,13 +44,14 @@ "license": "Apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/commoncode@21.5.12", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/commoncode", "repository_download_url": "https://pypi.org/packages/source/c/commoncode/commoncode-21.5.12.tar.gz", - "api_data_url": "https://pypi.org/pypi/commoncode/21.5.12/json" + "api_data_url": "https://pypi.org/pypi/commoncode/21.5.12/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/commoncode@21.5.12" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info-expected.json index 48a19670808..d3194244f67 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info-expected.json @@ -47,7 +47,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown AND bsd-new", + "license_expression": "bsd-new AND bsd-new", "declared_license": { "license": "BSD", "classifiers": [ @@ -55,8 +55,576 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "Jinja2-2.10.dist-info/DESCRIPTION.rst", + "size": 978, + "sha1": null, + "md5": null, + "sha256": "6f9724143a0ceef56dcff980b090f838fb5e14a0aa13b6debb7e7783808ea182", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/INSTALLER", + "size": 4, + "sha1": null, + "md5": null, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/LICENSE.txt", + "size": 1554, + "sha1": null, + "md5": null, + "sha256": "26fcd436fdc8a39d44896ac03e6f1dfd25e38499c48f20d8bc1dd3bf0aaa8a5b", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/METADATA", + "size": 2258, + "sha1": null, + "md5": null, + "sha256": "d7c12053ccd1ebe6affb4fb9cbf81779bccae069c107fefa9402d4b25fba4073", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "91db0dfb93890192221cdfa23b846197cd8ac92d1b0d67f8b81c0c6e435a7ebf", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/entry_points.txt", + "size": 72, + "sha1": null, + "md5": null, + "sha256": "35dcd570eaeac8dc8a0f10f4f5a1118ffff76c5c76a5a6618b3143b0a9958620", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/metadata.json", + "size": 1473, + "sha1": null, + "md5": null, + "sha256": "34f509f53301c55400bff913273bd4f07c263fee1766f6caf66cfaff8614565e", + "sha512": null, + "extra_data": {} + }, + { + "path": "Jinja2-2.10.dist-info/top_level.txt", + "size": 7, + "sha1": null, + "md5": null, + "sha256": "3e47955ad2dbdfe0aa8d68b57cedbd3826e3e791215ff72184aac276b55eff3b", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__init__.py", + "size": 2614, + "sha1": null, + "md5": null, + "sha256": "c491e368ca32e75fca5e7d707f4732b07ead51489f531642c1239f709184619c", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/_compat.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/_identifier.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/asyncfilters.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/asyncsupport.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/bccache.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/compiler.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/constants.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/debug.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/defaults.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/environment.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/exceptions.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/ext.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/filters.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/idtracking.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/lexer.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/loaders.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/meta.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/nativetypes.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/nodes.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/optimizer.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/parser.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/runtime.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/sandbox.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/tests.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/utils.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/__pycache__/visitor.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/_compat.py", + "size": 2596, + "sha1": null, + "md5": null, + "sha256": "c4feb4084e50afc15361c0c4d5fe78b5b64b286bccc189a5e3ef13ed0e0a1bd9", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/_identifier.py", + "size": 1726, + "sha1": null, + "md5": null, + "sha256": "5b5401498fa226ccadea847f9ca4ae34d0b357de6f2c839881434f508d5de605", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/asyncfilters.py", + "size": 4144, + "sha1": null, + "md5": null, + "sha256": "7130cfbeb4bc1e9fc8930b19d66f5a7ff96be671f2b30eee4dae605743666551", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/asyncsupport.py", + "size": 7878, + "sha1": null, + "md5": null, + "sha256": "504ad0dd89532da4a315bf783f83159f4f3e6950fd8c9c6dcb62557cc45bfb53", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/bccache.py", + "size": 12794, + "sha1": null, + "md5": null, + "sha256": "9d095dc7465160034cc9fbce8a146860529295475de6f2644bb063c4dc253993", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/compiler.py", + "size": 65386, + "sha1": null, + "md5": null, + "sha256": "06a0b953a27139b49185b9724ff6ba4e9e46b44539cf7512d5ae232d06b1c60a", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/constants.py", + "size": 1626, + "sha1": null, + "md5": null, + "sha256": "bb0c15f195211e169c02ecf93d3c1c91fb1ba816aa33b68a7f224bee4197e584", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/debug.py", + "size": 12045, + "sha1": null, + "md5": null, + "sha256": "59355e5051946b8bfa45e0ac62ffa254f6b7a64341ef93a29c9b773dfc4d757b", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/defaults.py", + "size": 1400, + "sha1": null, + "md5": null, + "sha256": "126fbde619ac27121e9c3099141d584af7fd08d85ef6b066cad377c94ac17160", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/environment.py", + "size": 50849, + "sha1": null, + "md5": null, + "sha256": "56790092ac3c25b8d972de2d0321e5a41ae46b6bea07e679f1100ffb7d8fd596", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/exceptions.py", + "size": 4428, + "sha1": null, + "md5": null, + "sha256": "fd18fe3558bdf10e808848d840eb0ff1d10876ee40966447cdc48d38f7568b1e", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/ext.py", + "size": 24500, + "sha1": null, + "md5": null, + "sha256": "6ad310c9d102f3ab4dd7352c750887c392f9705eb69c36ea1ae7b6e588aedcde", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/filters.py", + "size": 36528, + "sha1": null, + "md5": null, + "sha256": "c8e00993432c1fefe0102d22d14e8dc1e55085bb58682fae13cc6cc0714b178c", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/idtracking.py", + "size": 9197, + "sha1": null, + "md5": null, + "sha256": "d866c34b322f180ac40462e4a2f2e4a847e6631996b047fc737419c0ce2e36cc", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/lexer.py", + "size": 28559, + "sha1": null, + "md5": null, + "sha256": "c9210fa1777583bc118ecbb0db7ba2992ea79063796aaad8c1c38ac426953014", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/loaders.py", + "size": 17382, + "sha1": null, + "md5": null, + "sha256": "c624ee51128010e6f2ca6d2753c3c2217bbf429f1f9f4009e682000d4526fb94", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/meta.py", + "size": 4340, + "sha1": null, + "md5": null, + "sha256": "7e6287c649996003a6f50c965b2f0431de9e79f008876df8ae404c5b65f8651f", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/nativetypes.py", + "size": 7308, + "sha1": null, + "md5": null, + "sha256": "fec2614bc7fef10d103080b4766d5811d2f2c44ca83be91c87ca8e2f9c540df1", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/nodes.py", + "size": 30853, + "sha1": null, + "md5": null, + "sha256": "2f5d0bfe74037ee6cb84edd78e917dab3e3a1528767252feddee3da205653260", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/optimizer.py", + "size": 1722, + "sha1": null, + "md5": null, + "sha256": "32c765140089d0545d3ed8e608076dec943d486ad715a0cd51ab25b1641a1b73", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/parser.py", + "size": 35875, + "sha1": null, + "md5": null, + "sha256": "94fcd311b7294d104bc3c8a2e8e6321311de0216992cc034e47a6fe2597750b9", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/runtime.py", + "size": 27755, + "sha1": null, + "md5": null, + "sha256": "0c7743dfc3eaf208fbb96402e6eb09c961683562f7d7b03d02f5ce5bf08b077e", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/sandbox.py", + "size": 16708, + "sha1": null, + "md5": null, + "sha256": "4d5c991e536aa93cecbfd7efd8dbc936649d5911d382e8723077718d69acdf65", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/tests.py", + "size": 4237, + "sha1": null, + "md5": null, + "sha256": "88940bc1b6a966bf842aab931bf7d53957701d450a7f7497f5e3648d00c5f285", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/utils.py", + "size": 20629, + "sha1": null, + "md5": null, + "sha256": "ab6e15ba9199a2d43eb8ecab27109a5ed0d68590b5460b101bb91c7668dc9364", + "sha512": null, + "extra_data": {} + }, + { + "path": "jinja2/visitor.py", + "size": 3316, + "sha1": null, + "md5": null, + "sha256": "243d47d5c00d036f49727b457cde5f3f2a90c41e1b238c02d3407365af971e4b", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -78,9 +646,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/jinja2@2.10", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/Jinja2", "repository_download_url": "https://pypi.org/packages/source/J/Jinja2/Jinja2-2.10.tar.gz", - "api_data_url": "https://pypi.org/pypi/Jinja2/2.10/json" + "api_data_url": "https://pypi.org/pypi/Jinja2/2.10/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/jinja2@2.10" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info-expected.json index 6c4f3dfe155..4d02d14fb75 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info-expected.json @@ -46,13 +46,78 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "mimeparse.py", + "size": 6246, + "sha1": null, + "md5": null, + "sha256": "bd5bb1ec21fdb003f31b5f5502eb4961db0c5ef236f830cfc21296ae76536179", + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/DESCRIPTION.rst", + "size": 1654, + "sha1": null, + "md5": null, + "sha256": "3b7ce99a4cd5559151b41e92e6b8fbec4821716e94e860879d4b42b089a49989", + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/METADATA", + "size": 2468, + "sha1": null, + "md5": null, + "sha256": "74f097a62186c97d5ae6751d597c4669b676c790e02c117dc75e16fbfc3ff177", + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/metadata.json", + "size": 935, + "sha1": null, + "md5": null, + "sha256": "4e1edf7804619f1b3dca66cffb6ef6370977d7afc0f9378a80d39b933f67be89", + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/top_level.txt", + "size": 10, + "sha1": null, + "md5": null, + "sha256": "e9892849c0da62bd49fd528a0582af51a4d9032d4d046efbd209c5b0b1aecf18", + "sha512": null, + "extra_data": {} + }, + { + "path": "python_mimeparse-1.6.0.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "02f47459e4e90dac53eb8e5b979150c542ba34fb1396cdadb69706260de3d578", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/python-mimeparse@1.6.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/python-mimeparse", "repository_download_url": "https://pypi.org/packages/source/p/python-mimeparse/python-mimeparse-1.6.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json" + "api_data_url": "https://pypi.org/pypi/python-mimeparse/1.6.0/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/python-mimeparse@1.6.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info-expected.json index 6db0ba6ebb6..a9ec8678d51 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info-expected.json @@ -47,7 +47,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -55,13 +55,195 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "toml-0.10.1.dist-info/DESCRIPTION.rst", + "size": 5262, + "sha1": null, + "md5": null, + "sha256": "0db5e52d356a193ece83171966aa6de2f7380708e42fdc8c6cdd5705b5dc9dd4", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/INSTALLER", + "size": 4, + "sha1": null, + "md5": null, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/LICENSE.txt", + "size": 1252, + "sha1": null, + "md5": null, + "sha256": "2d9294823df6c89357c8be4927fce79361d6561e5ee7532d5926e63939aaa536", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/METADATA", + "size": 6371, + "sha1": null, + "md5": null, + "sha256": "f45cdd6f8f921bca704cf6c1453d6404140154b8cb09b10a94116386546b45fe", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "02f47459e4e90dac53eb8e5b979150c542ba34fb1396cdadb69706260de3d578", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/metadata.json", + "size": 1185, + "sha1": null, + "md5": null, + "sha256": "5c8bc81c9d06c64ee50f031a8e43917158d51127ee2805e13e1315ac91d1a9bc", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml-0.10.1.dist-info/top_level.txt", + "size": 5, + "sha1": null, + "md5": null, + "sha256": "d813bc651367bc95a05f2890bfae8b05bfeff3ba81cdca14b4405e7c0ef93ae9", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__init__.py", + "size": 723, + "sha1": null, + "md5": null, + "sha256": "0adb86e5a40d93a9ba326c68b6bb7a179db1f5d45de77a324e23188a2f7b867d", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/common.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/decoder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/encoder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/ordered.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/__pycache__/tz.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/common.py", + "size": 242, + "sha1": null, + "md5": null, + "sha256": "56205c70076e3fa79934901bd4f3a14618ce022e7a4c3b0d8162754e381702e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/decoder.py", + "size": 38684, + "sha1": null, + "md5": null, + "sha256": "811827350ef7237670f18b3402b0646de73d877d7bcde163991bb84cca17ba6c", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/encoder.py", + "size": 9931, + "sha1": null, + "md5": null, + "sha256": "f47a5e90fb5790075f84fa59a9f1d4c717d6f367ccc49f5ac9b88b53371b477d", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/ordered.py", + "size": 354, + "sha1": null, + "md5": null, + "sha256": "9b3d37959995d1b99cf65b1844850eba3ec3b2ee4fb70abe52d195ab915d559e", + "sha512": null, + "extra_data": {} + }, + { + "path": "toml/tz.py", + "size": 618, + "sha1": null, + "md5": null, + "sha256": "0eb020237c19c5988670bb95fe5f2e780fe73eb628c50de1640f6d2528d646c4", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/toml@0.10.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/toml", "repository_download_url": "https://pypi.org/packages/source/t/toml/toml-0.10.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/toml/0.10.1/json" + "api_data_url": "https://pypi.org/pypi/toml/0.10.1/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/toml@0.10.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info-expected.json index 7f9143ff71c..abf9a6e6a27 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info-expected.json @@ -48,7 +48,7 @@ "code_view_url": "Code, https://github.com/urllib3/urllib3", "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -56,9 +56,786 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [ + { + "path": "urllib3-1.26.4.dist-info/DESCRIPTION.rst", + "size": 41482, + "sha1": null, + "md5": null, + "sha256": "4c66f27c72fca218f59fa8dfb423e4030c0eaa11a1551abda8fc2e039635bfce", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/INSTALLER", + "size": 4, + "sha1": null, + "md5": null, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/LICENSE.txt", + "size": 1115, + "sha1": null, + "md5": null, + "sha256": "c37bf186e27cf9dbe9619e55edfe3cea7b30091ceb3da63c7dacbe0e6d77907b", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/METADATA", + "size": 43414, + "sha1": null, + "md5": null, + "sha256": "4f5d9bf5ecae7806dfaeb1a77ab3c78d87da784dcbda65538cd8b486fe74bfed", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "02f47459e4e90dac53eb8e5b979150c542ba34fb1396cdadb69706260de3d578", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/metadata.json", + "size": 1857, + "sha1": null, + "md5": null, + "sha256": "1d8941772636a8b01b6c4d3b06e197eeae07088b6b5e3ff100ada690011528d4", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3-1.26.4.dist-info/top_level.txt", + "size": 8, + "sha1": null, + "md5": null, + "sha256": "10c8972f6b0aad3726accc481d3a9d737113e78a50236634ef62dec4511e9afa", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__init__.py", + "size": 2763, + "sha1": null, + "md5": null, + "sha256": "8f7cb31c86e65bb092f8829027df8f3d07ff60a3bc10e01ecbfacc5b4511eeeb", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/_collections.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/_version.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/connection.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/connectionpool.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/exceptions.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/fields.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/filepost.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/poolmanager.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/request.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/__pycache__/response.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/_collections.py", + "size": 10811, + "sha1": null, + "md5": null, + "sha256": "469d6657206073f52501ca7a3376add6c909057479278dcd6b0453bd6da0fd76", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/_version.py", + "size": 63, + "sha1": null, + "md5": null, + "sha256": "d818e4fdc078f7ddb53d3bdeade5a9f194773612cda02300c874863fe39eb0b9", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/connection.py", + "size": 18748, + "sha1": null, + "md5": null, + "sha256": "abebdffd333733245b65c167dfe5422990527f4a048468efec115e666ffb930e", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/connectionpool.py", + "size": 37133, + "sha1": null, + "md5": null, + "sha256": "20aa1eb89658f580189b418ae2af8c5c08725d6d0cfc59ef69b61a36c0c847e1", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/_appengine_environ.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/appengine.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/securetransport.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/__pycache__/socks.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_appengine_environ.py", + "size": 957, + "sha1": null, + "md5": null, + "sha256": "6c36f2384856d8228b25c42a00a032ac41cdf9a925b321c52aaeaf17c645b269", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/bindings.py", + "size": 17637, + "sha1": null, + "md5": null, + "sha256": "135ffb49cb2039c85fc677a8cdb02e78aef3882c05df97e76b80ee0c2609f7fa", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/_securetransport/low_level.py", + "size": 13908, + "sha1": null, + "md5": null, + "sha256": "96021db12c9ca9f0745e6e41889cd719e20a4fbc9b0903053c902091cc0f6b5b", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/appengine.py", + "size": 11010, + "sha1": null, + "md5": null, + "sha256": "ecfc5bd2d29f0c1fcb4c63c4462b301f4aa89a10e85143a8e64c326c028b4321", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/ntlmpool.py", + "size": 4160, + "sha1": null, + "md5": null, + "sha256": "e88f79875ffbd5fcf19a831236d634801f259f20a856d3ff0e9a851a3d787dd5", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/pyopenssl.py", + "size": 16778, + "sha1": null, + "md5": null, + "sha256": "be087a8f9db0f71830abedd1da47c1e4cd896e54004c97ca00ade52007359128", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/securetransport.py", + "size": 34286, + "sha1": null, + "md5": null, + "sha256": "2b118f664f1de187a95a6ed173e481b755ebcc87e72ca73c26451557be57ce01", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/contrib/socks.py", + "size": 7097, + "sha1": null, + "md5": null, + "sha256": "0dc463336974ad0308ca162b37aafeb6756463a6530f11c994cf3fbac0241820", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/exceptions.py", + "size": 8217, + "sha1": null, + "md5": null, + "sha256": "d0c9e7a372874cd7d745f63beb7f0db9f38f9146fa9973a6f8baa3fb8c76c3c0", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/fields.py", + "size": 8579, + "sha1": null, + "md5": null, + "sha256": "92f2c30a0fc9987d652e3514118fc52d2f14858ee106f0cfb951136d8f2676b3", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/filepost.py", + "size": 2440, + "sha1": null, + "md5": null, + "sha256": "e5bfeaaa04475652fbb8bb5d018073061f861e653901f255b7fd8dd174b73de6", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/__init__.py", + "size": 108, + "sha1": null, + "md5": null, + "sha256": "87804b843e2d2da071d5a75a0ed2977eea6c82a634c162d76ff7f5ff256557a0", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/__pycache__/six.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/backports/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/backports/makefile.py", + "size": 1417, + "sha1": null, + "md5": null, + "sha256": "9dbcedde2d1a80f54fd3b8eaaa08e16988cc9ae022fd6e44d04cb0662bd53bc1", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/six.py", + "size": 32536, + "sha1": null, + "md5": null, + "sha256": "69dc78cfe78cfc3d15beed0822a573140090feec7d97ae32ec391211f6f1083b", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/ssl_match_hostname/__init__.py", + "size": 757, + "sha1": null, + "md5": null, + "sha256": "ce9a5ecdd1107691ac61eac8ea657a31f518cb8f79255e2670e582fc681b9635", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/packages/ssl_match_hostname/_implementation.py", + "size": 5679, + "sha1": null, + "md5": null, + "sha256": "e9d67eab4ef883b5e1b09dbb3050a091cb7c895359077b0c66f2a17fe294572d", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/poolmanager.py", + "size": 19763, + "sha1": null, + "md5": null, + "sha256": "c21ce55fa51312038330e0b2d190cc50e351042cf9c3220cf19f68a57018f8b9", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/request.py", + "size": 5985, + "sha1": null, + "md5": null, + "sha256": "645488a97d02e968b38b179c0a1677fe8932bbb044bf4959bb5553d2cea1e123", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/response.py", + "size": 28203, + "sha1": null, + "md5": null, + "sha256": "846846061ed3904921fc8420e42d56ff1b8f36b8082afe415173f213eab42ee1", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__init__.py", + "size": 1155, + "sha1": null, + "md5": null, + "sha256": "2449929a6aaa2f26b0f0fe75814226661f06c20f62d7349ef83a2a022b67da77", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/connection.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/proxy.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/queue.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/request.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/response.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/retry.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/ssl_.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/ssltransport.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/timeout.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/url.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/__pycache__/wait.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/connection.py", + "size": 4910, + "sha1": null, + "md5": null, + "sha256": "db507e2d7d1cf1f9313c3b2cc8709a2b4a429e6aca9a196d839128a2e1e200f5", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/proxy.py", + "size": 1604, + "sha1": null, + "md5": null, + "sha256": "1468a90049ef66d7b295d5cd8dc7b80c407b633c14f9ae657a9f32e52d2a1d08", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/queue.py", + "size": 498, + "sha1": null, + "md5": null, + "sha256": "9d1817f3f797fbf564bf1a17d3de905a8cfc3ecd101d4004c482c263fecf9dc3", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/request.py", + "size": 4123, + "sha1": null, + "md5": null, + "sha256": "367cda10a4353dabb0e4c14c57a1e68043072137f402e6bd7d0bb38b6b99cc67", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/response.py", + "size": 3510, + "sha1": null, + "md5": null, + "sha256": "189a60dc4822f6a6895d1c01879c2ff8c36e4566a7e4122ee34a117a8c563f6f", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/retry.py", + "size": 21396, + "sha1": null, + "md5": null, + "sha256": "b3764d2973bafeddb7650320f3396edb43cc4aaada4f8f79f92fe6118ff5f5a9", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/ssl_.py", + "size": 16269, + "sha1": null, + "md5": null, + "sha256": "7d1ab3466a0b7e20efe7fb45ce016d1b394ebae1e82d7d2eb3b5947fbb580c0a", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/ssltransport.py", + "size": 6908, + "sha1": null, + "md5": null, + "sha256": "22f190becf585a47f88f37ea5634eefd45a3c005203e7e4072d6a35bc54bcfa0", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/timeout.py", + "size": 10003, + "sha1": null, + "md5": null, + "sha256": "4126c150d381f7287a0270e7eb54ab2d0d21839a33d08f7eb97106f75009b888", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/url.py", + "size": 13964, + "sha1": null, + "md5": null, + "sha256": "2d67cb4a523897616650c29f0a412509a5b5d3ed0dfac2434fd6f1683649923b", + "sha512": null, + "extra_data": {} + }, + { + "path": "urllib3/util/wait.py", + "size": 5404, + "sha1": null, + "md5": null, + "sha256": "dcc50a452014243076b60728eea454b245b4cd7180598bd1444e10d7feb194bb", + "sha512": null, + "extra_data": {} + } + ], + "extra_data": { + "Documentation": "Documentation, https://urllib3.readthedocs.io/" + }, "dependencies": [ { "purl": "pkg:pypi/pyopenssl", @@ -124,9 +901,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/urllib3@1.26.4", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/urllib3", "repository_download_url": "https://pypi.org/packages/source/u/urllib3/urllib3-1.26.4.tar.gz", - "api_data_url": "https://pypi.org/pypi/urllib3/1.26.4/json" + "api_data_url": "https://pypi.org/pypi/urllib3/1.26.4/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/urllib3@1.26.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info-expected.json index a2e02dbebbd..942e46a077b 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info-expected.json @@ -39,7 +39,7 @@ "code_view_url": null, "vcs_url": "Repository, https://github.com/SK-415/HarukaBot/tree/master/src/plugins/haruka_bot", "copyright": null, - "license_expression": "agpl-3.0-plus", + "license_expression": "agpl-3.0-plus AND agpl-3.0-plus", "declared_license": { "license": "AGPL-3.0-or-later", "classifiers": [ @@ -47,9 +47,192 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [ + { + "path": "haruka_bot/__init__.py", + "size": 279, + "sha1": null, + "md5": null, + "sha256": "b2d34c924e6ca5b8f9ccdc5e2561771bebe6566cbb7b025858a32ad3957c19db", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/auto_agree.py", + "size": 779, + "sha1": null, + "md5": null, + "sha256": "d786b16660c3fcd81dd4acdab92c034f078f6be2420e686eb54551da319db53a", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/bilireq.py", + "size": 5325, + "sha1": null, + "md5": null, + "sha256": "ff8610f8a837c01dc28762686f4911d9cbc15c978fb52207de84a921e59b9469", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/cli/__init__.py", + "size": 200, + "sha1": null, + "md5": null, + "sha256": "0201fe02a5296daf72d8fc1e36c6b5c8de8d8765fae3745335ef4e4632745775", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/cli/__main__.py", + "size": 20, + "sha1": null, + "md5": null, + "sha256": "3e414d4bfedc775e837d65de4f9a44320664daa3e498b7efa0bca4f35b23e096", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/cli/bot.py", + "size": 895, + "sha1": null, + "md5": null, + "sha256": "c1be148725e6dc894a661965b3008f3feff8847ab65222057c0f413956e5930a", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/cli/utils.py", + "size": 952, + "sha1": null, + "md5": null, + "sha256": "7075d894a7433f5fafa98ca30338950a74862a0a82887e63c52c7c314b9384f5", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/config.py", + "size": 10492, + "sha1": null, + "md5": null, + "sha256": "d1d32a3f4d7711e37fe19e385f442ae7f18296c0048c6d5eb9c7f9acc9f2bb26", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/config_manager.py", + "size": 7859, + "sha1": null, + "md5": null, + "sha256": "f57764bf0b46e68bed90cdb93a5b93f4cc65b194f68e11fdc7b62d6fea978b54", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/dynamic.py", + "size": 3072, + "sha1": null, + "md5": null, + "sha256": "38ea7be42cc3046ec356ceb3f88caf1d6a94de8125b63a3c80c309842ae5c862", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/dynamic_pusher.py", + "size": 1721, + "sha1": null, + "md5": null, + "sha256": "908ec9efab70de086bac8a2816187a5b577cdd33fe4544a8516bbdf59af55a3e", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/live_pusher.py", + "size": 1707, + "sha1": null, + "md5": null, + "sha256": "3735b49dbd0c7daf70cefef515ce9c47b63ba8c72aca59ed214a5468e68e7e1d", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/login.py", + "size": 3065, + "sha1": null, + "md5": null, + "sha256": "ec6940e6fa5c31f1b0b66ccf329718eaeaaa087caf8058d0713487985239abfd", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/utils.py", + "size": 2968, + "sha1": null, + "md5": null, + "sha256": "3f8455b67b4aaf043339e0d861229bc9b02ebe9fabc83acbe11ae07c0cc418e2", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot/version.py", + "size": 322, + "sha1": null, + "md5": null, + "sha256": "1a46684dd91e8643d7fc9fc12e10b00aba15e09bdd8302727a73dd7cf290667a", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot-1.2.3.dist-info/entry_points.txt", + "size": 51, + "sha1": null, + "md5": null, + "sha256": "0638bf22f40625e7b54b5a52bb798235fb680ecfa9fa5cc72645672d95cf9b40", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot-1.2.3.dist-info/LICENSE", + "size": 35182, + "sha1": null, + "md5": null, + "sha256": "13fb48a6c31a72e0e2b69650b1cebe8954f7b73449848492dcfd22b25bd91afa", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot-1.2.3.dist-info/WHEEL", + "size": 83, + "sha1": null, + "md5": null, + "sha256": "54dd9e120e0f1db4ce9e25dbf9c09840f73acd44d2e1d01c0138e5814deaf8ba", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot-1.2.3.dist-info/METADATA", + "size": 4560, + "sha1": null, + "md5": null, + "sha256": "8392719243ddc15284a49fbfc7f9ba13881e00966b44f9cffc9b9d4aa6ca5fc0", + "sha512": null, + "extra_data": {} + }, + { + "path": "haruka_bot-1.2.3.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": { + "Documentation": "Documentation, https://github.com/SK-415/HarukaBot#readme" + }, "dependencies": [ { "purl": "pkg:pypi/click", @@ -160,9 +343,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/haruka-bot@1.2.3", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/haruka-bot", "repository_download_url": "https://pypi.org/packages/source/h/haruka-bot/haruka-bot-1.2.3.tar.gz", - "api_data_url": "https://pypi.org/pypi/haruka-bot/1.2.3/json" + "api_data_url": "https://pypi.org/pypi/haruka-bot/1.2.3/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/haruka-bot@1.2.3" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info-expected.json index 96b832b1636..9cf792ad546 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info-expected.json @@ -45,7 +45,7 @@ "code_view_url": "Source, https://github.com/pypa/pip", "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -53,13 +53,7254 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [ + { + "path": "pip/__init__.py", + "size": 455, + "sha1": null, + "md5": null, + "sha256": "7d9e34d4e64676fe79606b2e08486cbdd35ae180992e62b8e7b48ddeaaecb499", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/__main__.py", + "size": 911, + "sha1": null, + "md5": null, + "sha256": "6ea080335723d47c07083c775896be2c9c4e0578a61b113c3a306a02f9e1560d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/__init__.py", + "size": 495, + "sha1": null, + "md5": null, + "sha256": "dac8b6dc9056d5eae0d7dc4827c083ead7c6927cf48a3b579b3b978c67c63061", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/build_env.py", + "size": 8088, + "sha1": null, + "md5": null, + "sha256": "f7f51a4367e9b01be92808e2dbb7fb6cf022dafde66f4701bc361c7a3c0528d3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cache.py", + "size": 12249, + "sha1": null, + "md5": null, + "sha256": "a53d7b555c60cd92b7d9aa98e45452f06c8023bdcb2b334c17c65e950ece8e6d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/configuration.py", + "size": 14115, + "sha1": null, + "md5": null, + "sha256": "f86c73d89f8abafc62a96209f45f979d8559e652a1364ed53baa277446c7e043", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/exceptions.py", + "size": 12637, + "sha1": null, + "md5": null, + "sha256": "655a40af142b4a59b8a8032d1da6379c7bc6fede5e4a2dd60a7328c1d9bf9bc2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/locations.py", + "size": 6732, + "sha1": null, + "md5": null, + "sha256": "ed88f3272d82ae8403f0604c7a69c759197de38f01488b7495f1fdf01f8391df", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/main.py", + "size": 437, + "sha1": null, + "md5": null, + "sha256": "215067510f851bb0caebad7bb845d1079fd026ab2902c0459939937ac6246dd4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/pyproject.py", + "size": 7400, + "sha1": null, + "md5": null, + "sha256": "5492acad73911a21a80cf54a09086ebb8b569504933a1a2246554b44dbb8af1e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/self_outdated_check.py", + "size": 6779, + "sha1": null, + "md5": null, + "sha256": "abafe7a941cfa6df8349cc03f7b87b1424aa7789c8d6cfb1929388e08e596b76", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/wheel_builder.py", + "size": 9522, + "sha1": null, + "md5": null, + "sha256": "eb0d553d7ae952f0823e5574708d7035a0aa373e25685e81eb086f6b197d727b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/__init__.py", + "size": 132, + "sha1": null, + "md5": null, + "sha256": "1641c1829c716fefe077aaf51639cd85f30ecc0518c97a17289e9a6e28df7055", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/autocompletion.py", + "size": 6547, + "sha1": null, + "md5": null, + "sha256": "7a418db5c0c8d29eeb15573eeece13f536ecb382606fbbec07ae3d5c921b9518", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/base_command.py", + "size": 8810, + "sha1": null, + "md5": null, + "sha256": "0564f3b4ce1bea1f21a1d0c70ca8e027cda36927abbb60082c02718b577f20ff", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/cmdoptions.py", + "size": 28782, + "sha1": null, + "md5": null, + "sha256": "33f06dbaa7b2469640514632b6db37a60b81085d91686ba45690cf1349e2ae82", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/command_context.py", + "size": 975, + "sha1": null, + "md5": null, + "sha256": "ca0315a13cb68e936294a4feeb8d7a805490a5a06daca4416d56e2d9fcbffc45", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/main.py", + "size": 2616, + "sha1": null, + "md5": null, + "sha256": "1f173d759c96df1883b18657fbf2767065d3e4358d2cd9ff63ba3da1499ef847", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/main_parser.py", + "size": 2843, + "sha1": null, + "md5": null, + "sha256": "be802d8e8e1654f2187aeec5a9a6ef6bd497681dc18c6d201fddc605f7ba8c74", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/parser.py", + "size": 9480, + "sha1": null, + "md5": null, + "sha256": "e057f05bcc41f380ab90bb37e6e77dd1992109c5b2564c75ed70fa8f75c25bb7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/progress_bars.py", + "size": 9121, + "sha1": null, + "md5": null, + "sha256": "275cf292dd8b23881b05e5e8adf6119985791605e1716e31debeb113f6bb67b7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/req_command.py", + "size": 15132, + "sha1": null, + "md5": null, + "sha256": "122cfc4d5cdeab31bee34b7ba8b0b5bcefafce3091bd7f42faa5ccc9fc3d0f52", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/spinners.py", + "size": 5509, + "sha1": null, + "md5": null, + "sha256": "3d2f6ce772c1e5a0cf7a5227f0584a7ab2b76ce76079e7c51f9c12589d8f0b32", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/status_codes.py", + "size": 156, + "sha1": null, + "md5": null, + "sha256": "17ab831ba1a3ed134a4095039ddf3b40aa88d7a52cfadf81d303c5ff840ca567", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/__init__.py", + "size": 4100, + "sha1": null, + "md5": null, + "sha256": "ca82c09e61178e842061f0eec2cb961b7473cc3d7da1e1e86c61219a9218b01e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/cache.py", + "size": 5676, + "sha1": null, + "md5": null, + "sha256": "537acb8e5b3400c30ef0fc67857570229ec18b2be7b3cfa005384a4c7ded5fb6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/check.py", + "size": 1677, + "sha1": null, + "md5": null, + "sha256": "7ea46bcf6b8a3c2f10b31dab80bca0003d916ebfaac69d50e79cd4a3267307d4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/completion.py", + "size": 3081, + "sha1": null, + "md5": null, + "sha256": "39bb2c33beeab9feb5aaf6ee484e972f0501766fd671622f5c523e1f2d5106c2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/configuration.py", + "size": 9344, + "sha1": null, + "md5": null, + "sha256": "20dd90045eb9dec462454efea474e99d9ebf83289734a51090b88b68d44b28dc", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/debug.py", + "size": 7314, + "sha1": null, + "md5": null, + "sha256": "a2d0599e99e8b2d5f69266323a5ea0e827822e693a1f4d13b23d820ec0ad157c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/download.py", + "size": 4918, + "sha1": null, + "md5": null, + "sha256": "10a1658ff71e1941098fac820f0ecfeb0ef2528075e8870d1e14f6aa70850cd4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/freeze.py", + "size": 3452, + "sha1": null, + "md5": null, + "sha256": "bcb0413f577cc20117ae6961d3a85bcffc7f4359961d47625836bd34fd9e28b1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/hash.py", + "size": 1843, + "sha1": null, + "md5": null, + "sha256": "bf69d80a212c108f6711a9b5a7a1b0746f31ca3e6016ffb85abaaf35ec4a99e6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/help.py", + "size": 1270, + "sha1": null, + "md5": null, + "sha256": "af2b8c0eddad73b89cdcd2583238e83511f9afa2eb076c90559bde8409bc6cbb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/install.py", + "size": 28683, + "sha1": null, + "md5": null, + "sha256": "8762fcbd2eadd836c601db6d91d66632e70ad9e246d8262f7308436bb01d2ab4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/list.py", + "size": 11312, + "sha1": null, + "md5": null, + "sha256": "da8deb630dfb102ae17b8f81bb9b3fd82d1bc21620821878f37dccc5c58012e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/search.py", + "size": 5756, + "sha1": null, + "md5": null, + "sha256": "d473c0154fad9a02ab1e1af8c4dba4df13283de4b30ffa03bc30e2505659d791", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/show.py", + "size": 6996, + "sha1": null, + "md5": null, + "sha256": "afaf7e1bc1c87a90ca9b849ec9e1e3d04cf53fdc688a1ae9554c979ba3665d86", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/uninstall.py", + "size": 3311, + "sha1": null, + "md5": null, + "sha256": "62cf21c05b20d24bef1ad2c6606de26cbe412af5118654a5097e74650fa1b079", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/wheel.py", + "size": 6419, + "sha1": null, + "md5": null, + "sha256": "f87488484e40576f48ef9d80ab0e03766ba5ac677cac1fd94ce7696c9e93f223", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/__init__.py", + "size": 959, + "sha1": null, + "md5": null, + "sha256": "1020545b91adbbd4e3270c852ef8a6fa2ea450c615ba290d87d2396ac2fab5b0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/base.py", + "size": 1425, + "sha1": null, + "md5": null, + "sha256": "aeea6ba4cfcbd93d87362dca2d41e56c78a6675b16570fb74342dbf0eed30c02", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/installed.py", + "size": 760, + "sha1": null, + "md5": null, + "sha256": "62a96404aafa4d53f5300612e921bca23b9ddb5c153982cc67c8cc2c97bd3125", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/sdist.py", + "size": 4086, + "sha1": null, + "md5": null, + "sha256": "0f85d33250b080f94aebd97ad862d890d4954d57bdf5f479880715b7611b1a89", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/wheel.py", + "size": 1294, + "sha1": null, + "md5": null, + "sha256": "f79b83f937da628ab72a228177393d60c378451a89dbc2cda124d2d8ae3a81e9", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/__init__.py", + "size": 30, + "sha1": null, + "md5": null, + "sha256": "be9b7e25e4d979f87c6be142db665e0525c555bb817174868882e141925a3694", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/collector.py", + "size": 22838, + "sha1": null, + "md5": null, + "sha256": "acc7467400013abbc89740d89423165ebee6228aab536546790a42b9688fbb54", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/package_finder.py", + "size": 37364, + "sha1": null, + "md5": null, + "sha256": "21289e0dddb474e4a774c3726da7c2bb7a4ed8947704a39f1eff7605eb348f44", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/__init__.py", + "size": 63, + "sha1": null, + "md5": null, + "sha256": "dc31d477fab1a4fa337f3a2ea2a6bd83db6cd42cebe6a6877c5c5b9f1ae27a93", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/candidate.py", + "size": 1195, + "sha1": null, + "md5": null, + "sha256": "80009e0921d321a5ae07a44078b9862676c515b29fa7fe3b504443a02fe574e5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/direct_url.py", + "size": 6900, + "sha1": null, + "md5": null, + "sha256": "32704b3dc8b5844f4d761e9dde6d0b02a07b857ddc8bcd020894c4e5e7ab15a4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/format_control.py", + "size": 2823, + "sha1": null, + "md5": null, + "sha256": "45d9e7997c55269a42656cd6126153afecc3fe6dc6d22ccf2ea262e88a29ef93", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/index.py", + "size": 1161, + "sha1": null, + "md5": null, + "sha256": "71aaefc71693ee6272a04929b5a1021d466235a03a47936bb06179e736b0367f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/link.py", + "size": 7470, + "sha1": null, + "md5": null, + "sha256": "14c971bea2a62e88fbc5341280aa9f3b67a113559c803e02e4398406e0bf428b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/scheme.py", + "size": 778, + "sha1": null, + "md5": null, + "sha256": "1213e44ffe86d0c77ce094cb495a2962ca791ff2ba051118985bd4f07eb030af", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/search_scope.py", + "size": 4751, + "sha1": null, + "md5": null, + "sha256": "2ee9b4998e3fa5d47d0c3072e87579c4718830fa7f914f2f32ca982851d98a9e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/selection_prefs.py", + "size": 2044, + "sha1": null, + "md5": null, + "sha256": "a603634df81e3cf897d51e52d92f1873aa1d39f53d3731bb60ffe6fe09d2d24c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/target_python.py", + "size": 4034, + "sha1": null, + "md5": null, + "sha256": "47bb405c8d7907f720c3b1609eae5c23d17ee388285199dc1fd24cb44f295d1c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/wheel.py", + "size": 2772, + "sha1": null, + "md5": null, + "sha256": "1537f355be1621b7c87a1c61765015bc28a5fcc434f96e38a32379e9c13a3477", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/__init__.py", + "size": 50, + "sha1": null, + "md5": null, + "sha256": "8dfe93b799d5ffbce401106b2a88c85c8b607a3be87a054954a51b8406b92287", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/auth.py", + "size": 11652, + "sha1": null, + "md5": null, + "sha256": "76ddcdbd3449f35f364b756975814464c3d3d0984e287c85b51f8ef893252482", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/cache.py", + "size": 2329, + "sha1": null, + "md5": null, + "sha256": "e9c083ed736baa1d5dd6539263953ed195ce1b5630120318b3e561459572ccc0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/download.py", + "size": 5151, + "sha1": null, + "md5": null, + "sha256": "5531833b4d7f9d7fb930275ab5de0872fd05f3cfccf0ddd69d6e817af03a6b4a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/lazy_wheel.py", + "size": 8138, + "sha1": null, + "md5": null, + "sha256": "45771020b4f9bf950eea4c60bfbe824a770b4ea44bdbda3e3976da5b668aeede", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/session.py", + "size": 15208, + "sha1": null, + "md5": null, + "sha256": "66cd2e8b23f14e97e9812bfe648f612bd4e36ac993a6506e062bce4dc52224c1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/utils.py", + "size": 4172, + "sha1": null, + "md5": null, + "sha256": "64f1e0eeee8311c83612f20b21d3c40a7bcf2e9db538f1f135599e5df332fa7d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/xmlrpc.py", + "size": 1882, + "sha1": null, + "md5": null, + "sha256": "3c50a25ff9e7c18c42f121487fb277b6b3f8d040868c0e9f976f8854d85b90f3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/check.py", + "size": 5215, + "sha1": null, + "md5": null, + "sha256": "2580ec54bbe917226e26ad2db52b6083c4d129b7349b260500c9df9e740e4443", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/freeze.py", + "size": 10373, + "sha1": null, + "md5": null, + "sha256": "fef2526701c1373055d06a515125e1509cf706b18575c4f6693716c47d4be0fd", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/prepare.py", + "size": 19903, + "sha1": null, + "md5": null, + "sha256": "46ded887bc35d3f43ebc8ddbed1d7092dd91e973d7f1855474e0e4f9368623d7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/metadata.py", + "size": 1254, + "sha1": null, + "md5": null, + "sha256": "d9a20b8160904c5d5a2215ae087f134d28effe4626037c75dbad9f4f6150ea94", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/metadata_legacy.py", + "size": 2011, + "sha1": null, + "md5": null, + "sha256": "560cc14e4f276883bcfbc37f89f11817b640c56503869856548695959d85a983", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/wheel.py", + "size": 1465, + "sha1": null, + "md5": null, + "sha256": "df7bdd9314cefa036aaed587d5e34bfee668e08adac7ce66a03c76a3dcda7b73", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/wheel_legacy.py", + "size": 3356, + "sha1": null, + "md5": null, + "sha256": "3756aa359c86511057d018fac0f981d2de3cebaa0c6f1a075290bda73e85c93d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/__init__.py", + "size": 51, + "sha1": null, + "md5": null, + "sha256": "997ee1c83d863413b69851a8903437d2bfc65efed8fcf2ddb71714bf5e387beb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/editable_legacy.py", + "size": 1488, + "sha1": null, + "md5": null, + "sha256": "ac9ff1b36aad0d48e9636fa7e9e62557266236829b3ad65766b62b7272042ede", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/legacy.py", + "size": 4281, + "sha1": null, + "md5": null, + "sha256": "ceedc6c39e1d807b65bb25b99fc8f9a8a70049c89d41726fa81f1f6f4a0b07ee", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/wheel.py", + "size": 31310, + "sha1": null, + "md5": null, + "sha256": "9c998e48e618de47a4b1777fdc616e84059e7a82af18eca84866e35c0063678d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/__init__.py", + "size": 3133, + "sha1": null, + "md5": null, + "sha256": "b3e139571c6aaa972cef17d8e6063af681e882c589e2c2db9d4883a169a41ce5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/constructors.py", + "size": 16387, + "sha1": null, + "md5": null, + "sha256": "2eb4876d11eee76fa1e87335a89286ebca35270e6af0cbc919faf802cea3dae5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_file.py", + "size": 19448, + "sha1": null, + "md5": null, + "sha256": "a7b9f7634ab6ef9122b2a7f1774bed7e7c58be54fa4c2098d2d8fbe69fb288e6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_install.py", + "size": 33080, + "sha1": null, + "md5": null, + "sha256": "86a40c9bab3b7f56b644019ab32021cb8ede646a26dce04a7a244ceb4c7174f8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_set.py", + "size": 7886, + "sha1": null, + "md5": null, + "sha256": "77171f6e279661f6244c9344d3b53cc5a3b8d332f197c06158e7081d51539a8a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_tracker.py", + "size": 4690, + "sha1": null, + "md5": null, + "sha256": "a966a27a334aea8e9ca9ec9338818a214d42a32ad709caa0307622ddca9e94e0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_uninstall.py", + "size": 23706, + "sha1": null, + "md5": null, + "sha256": "a293060c66fb65a162a6945b69aac96a58edce5d823599811845129d3b9b13e0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/base.py", + "size": 682, + "sha1": null, + "md5": null, + "sha256": "c62ef6626212fa5123c8ad773cdff7aa4186b61038c86a0ad02eaa5b29f21eb1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/legacy/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/legacy/resolver.py", + "size": 18755, + "sha1": null, + "md5": null, + "sha256": "77ea96e945316d9a8ac97997d9baa75b90bc52d9ced1972c42e2b0fd05ee6a57", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/base.py", + "size": 2342, + "sha1": null, + "md5": null, + "sha256": "9fc46295e6bd8c2ce195bb458892b00b021048f5b40138c42ac09cd15a66f3de", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/candidates.py", + "size": 20339, + "sha1": null, + "md5": null, + "sha256": "447a3dafd836e455b3b9f2aff774e2f674b886f00f52b8408d20cbec609914d4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/factory.py", + "size": 17169, + "sha1": null, + "md5": null, + "sha256": "fbe6a162cafeafdcc885dc8927566e11381a42b5a23c8ab020b5a23039f52085", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/provider.py", + "size": 6134, + "sha1": null, + "md5": null, + "sha256": "04ff27874ed9d4595c4fe21ac3815b95133e0e351e524888b4a74a01161e33a3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/requirements.py", + "size": 4511, + "sha1": null, + "md5": null, + "sha256": "946be81d1864bac45f6b3e1c171601a1036ac52e937ae3b72baf2a96e8ba83ed", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/resolver.py", + "size": 10149, + "sha1": null, + "md5": null, + "sha256": "908f20d0d565608b03311983a65590768c7a58efb41fb088db037ed62c6769ec", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/appdirs.py", + "size": 1349, + "sha1": null, + "md5": null, + "sha256": "459cd41be0648766fe9a25f40d2677bfbd37ffe6e02bebf43df5820a3c1513d8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/compat.py", + "size": 8865, + "sha1": null, + "md5": null, + "sha256": "1a809250ca1499319e8398ab4062c367bbf5d80b3cef21eb3330571247be9e38", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/compatibility_tags.py", + "size": 5439, + "sha1": null, + "md5": null, + "sha256": "12d0498fea6cb63fd4d124d467c163946ed80d38ee459532e8663570cf3acaff", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/datetime.py", + "size": 295, + "sha1": null, + "md5": null, + "sha256": "28bfaf21d194f49229181e4d6249b05d6907f86ff69afbc0065991b68499b1aa", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/deprecation.py", + "size": 3318, + "sha1": null, + "md5": null, + "sha256": "a419cda20a00e14193c5afc90e73d7051458a4a31b1310215e9070030925381b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/direct_url_helpers.py", + "size": 4359, + "sha1": null, + "md5": null, + "sha256": "6d90813703d05726696068d7fd57289af56f447bcac3ef49cc457e16dd3d2d07", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/distutils_args.py", + "size": 1350, + "sha1": null, + "md5": null, + "sha256": "6b9ea66e537193d04689f6e91044c6eb59a606baa18ed8d1909e07627fa83841", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/encoding.py", + "size": 1284, + "sha1": null, + "md5": null, + "sha256": "c070c9db9c824ff4f8c92b1c08bdcff7bf0ea4badf0c2a62b60f03eb82045cc6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/entrypoints.py", + "size": 1152, + "sha1": null, + "md5": null, + "sha256": "bc770da6792c0afea69658a153a85f89f76c28f123c1c689d5a2c85c46b29da5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/filesystem.py", + "size": 6943, + "sha1": null, + "md5": null, + "sha256": "f9f5375ed7820082707fff45bc2654eef872c2fb779ee7ff72a902770832d58f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/filetypes.py", + "size": 571, + "sha1": null, + "md5": null, + "sha256": "476170ce8797edbfab6402ce5f1e5cb8ef153cf321510e277bbc26de7dc87160", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/glibc.py", + "size": 3297, + "sha1": null, + "md5": null, + "sha256": "2ce78d1a06b008a4bee247bd7e28bbf1fc170fbdddb4d6afdeec73d417fe01bf", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/hashes.py", + "size": 4358, + "sha1": null, + "md5": null, + "sha256": "c479aba8dc02d5e04dd2863447f4572c92d71af15da3983099bcffa5ab3de24f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/inject_securetransport.py", + "size": 810, + "sha1": null, + "md5": null, + "sha256": "335ed9945558eba02981e01256328a2ca373d0b01f93e4b25341d9e1907a3262", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/logging.py", + "size": 13093, + "sha1": null, + "md5": null, + "sha256": "6087ee0d412499d9fd708450fc473cae05ecd66e673b00c40ad66a3380811f95", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/misc.py", + "size": 28001, + "sha1": null, + "md5": null, + "sha256": "41065630990a2800cf4964189abc256ac73c6f4dde09c8219f4c83369ad882b2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/models.py", + "size": 1201, + "sha1": null, + "md5": null, + "sha256": "1ea88156d4db5bf6ff526be3d9f8e10d6387a3644a84fc12cf8880624419ebcf", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/packaging.py", + "size": 3035, + "sha1": null, + "md5": null, + "sha256": "56d8b070000becb062eed18bda37bb2de5b86c4d7528c1c60ac2753596395ed3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/parallel.py", + "size": 3404, + "sha1": null, + "md5": null, + "sha256": "edacf769a4cc0a4aa968b15ba5860ebe4d2b8fb1eee581f534f5d7a26aa381fe", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/pkg_resources.py", + "size": 1254, + "sha1": null, + "md5": null, + "sha256": "657fa4ed5e6afda356c83b1ef769cdee8acdd5a0a944bb1ac73a64059d572b35", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/setuptools_build.py", + "size": 5058, + "sha1": null, + "md5": null, + "sha256": "1352acc08ef07cd9c20c4e51e86f1cf596c1c84369bbb36aa1c8d8dba3c2403c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/subprocess.py", + "size": 9924, + "sha1": null, + "md5": null, + "sha256": "5243def3d81c8f104cc7bdeebada1e257803de4c1d94be983b5e819230dd5522", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/temp_dir.py", + "size": 8378, + "sha1": null, + "md5": null, + "sha256": "6e5986d2312f1207716d852dfd5d796e071320922bc59c00c3c4199424c96031", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/typing.py", + "size": 1401, + "sha1": null, + "md5": null, + "sha256": "c6463039e1e57f8cec1d70430b8df5d07b44ab08507185c53eada1df94dcae5d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/unpacking.py", + "size": 9488, + "sha1": null, + "md5": null, + "sha256": "60501c921aaabe67a103c29a9f9bddddbd6437ff5369faa63a4e1bfb2cf87e1a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/urls.py", + "size": 1527, + "sha1": null, + "md5": null, + "sha256": "ab6af0d643228a283f5d9728c894ac58c250a98c3edb0526acca124f89825bf2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/virtualenv.py", + "size": 3706, + "sha1": null, + "md5": null, + "sha256": "7cd1ab469fbc42634be4ecd76a305dfb3ecf6f03acc755d8e86f8054c0217eca", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/wheel.py", + "size": 7303, + "sha1": null, + "md5": null, + "sha256": "c05ce7de1f06a98be0b3258f66d5329f445bdcc2739adc8fde8c0c3a12a798bd", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/__init__.py", + "size": 617, + "sha1": null, + "md5": null, + "sha256": "be2271251a9113f99549cba6f396e04085c077aa34a3316dd7c5690bea8826b3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/bazaar.py", + "size": 3887, + "sha1": null, + "md5": null, + "sha256": "e6b451d36b836532dac504fe47939b77c1590ce3254a1a9876cfa9c1548926cf", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/git.py", + "size": 13985, + "sha1": null, + "md5": null, + "sha256": "92f07bdbdc2b298d0e58c4a0392d69525cb82e8b19a7cbadaddde4390b166a50", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/mercurial.py", + "size": 5162, + "sha1": null, + "md5": null, + "sha256": "173086998cd566f07ebf233bddf29c424d81e2330d5c69d7950d9b27b9e68253", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/subversion.py", + "size": 12399, + "sha1": null, + "md5": null, + "sha256": "ae575c9fd643b79b708cd3f3167fc52919f8a9d7e48e5c4730912c4763057e80", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/versioncontrol.py", + "size": 25966, + "sha1": null, + "md5": null, + "sha256": "5a9c5e4d10b4368181dae5c97667eae293f163ea7bb24d6b57f5a4c4cc60cd00", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/__init__.py", + "size": 4588, + "sha1": null, + "md5": null, + "sha256": "0acc67a583db8bfd9a82b0c8efd890ac299079945cc30205d02e9c9bfd51ca75", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/appdirs.py", + "size": 25907, + "sha1": null, + "md5": null, + "sha256": "33a218449b5d6609923c25c248c051074553dcff0c7456d60836d22eb07611b8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/contextlib2.py", + "size": 16915, + "sha1": null, + "md5": null, + "sha256": "e478c67e5533c160147dc20b852982d86aafa1875967317355f203ced1e2814b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distro.py", + "size": 43628, + "sha1": null, + "md5": null, + "sha256": "c713088766b72a68a9a5e5841f3ca74dd1d3dff8d9334a3ea68b3474058944e3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/ipaddress.py", + "size": 79875, + "sha1": null, + "md5": null, + "sha256": "fb4466bab237d5780068ddb45828b4ceb72ea1ab7dd27340ef4ffac86971d8f5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pyparsing.py", + "size": 273394, + "sha1": null, + "md5": null, + "sha256": "2756f8cf74bf2b0c895bb84a1a7a0dfa15d6f6980c23320fe904e1c98e7226ae", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/retrying.py", + "size": 9972, + "sha1": null, + "md5": null, + "sha256": "9377df95fe7f326d17708258841ed38f7e1ba8208f8540e461bc7536f5b614f1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/six.py", + "size": 34159, + "sha1": null, + "md5": null, + "sha256": "53867fcafe77e16e423728d8f62f15d4e5d8d928c09f2f32d8be6f0cb8614e13", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/vendor.txt", + "size": 437, + "sha1": null, + "md5": null, + "sha256": "6d65226918cc261b94b2a1591c4264047ffa949fc0be5f5c3b2b33708ef8207b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/__init__.py", + "size": 302, + "sha1": null, + "md5": null, + "sha256": "a49b40694c4eb0c3e7cad2350378ee009917603afc92b7529ec838620dce0448", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/_cmd.py", + "size": 1295, + "sha1": null, + "md5": null, + "sha256": "511184d0aac0f3b41e9021b74863dab6548f4f9ef57594c38cd6be6575f7a437", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/adapter.py", + "size": 4882, + "sha1": null, + "md5": null, + "sha256": "b12c1a49877ddc821f085538b4e3204a8e9bd8b0adfe0052690523f24b4914e0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/cache.py", + "size": 805, + "sha1": null, + "md5": null, + "sha256": "d5f738c093fc1d8b75c9c9c95de130e690a97812f60aac71ea0f456f40180d64", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/compat.py", + "size": 695, + "sha1": null, + "md5": null, + "sha256": "90736f31176deacfd7c2aabff6a266afda2edf060c38c50cc4f3dcc0dc53f0c7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/controller.py", + "size": 14149, + "sha1": null, + "md5": null, + "sha256": "096117de979d20cf6ceb4b2e7f8cd93ed9bf26f5609efa203062bf3a2046e45f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/filewrapper.py", + "size": 2533, + "sha1": null, + "md5": null, + "sha256": "bc008a3bc2e5ceefd95b28d5d45c67d4c0384c653ad0de4ddc64ab0057406364", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/heuristics.py", + "size": 4070, + "sha1": null, + "md5": null, + "sha256": "045187277c90731bd98b37e8f742cb674e13fd9e574825ef168b6ba7b52cd2c7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/serialize.py", + "size": 7091, + "sha1": null, + "md5": null, + "sha256": "bc86b88efab8c7f29238b74421e7689275f669760742e8cb0c5578f85db50e7a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/wrapper.py", + "size": 690, + "sha1": null, + "md5": null, + "sha256": "e4b5f4b89c2435052d612130dda1a61aef5663cc068a977cd6627c946d1dd0ce", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/__init__.py", + "size": 86, + "sha1": null, + "md5": null, + "sha256": "fa01cd298bda783d243a4e4cef878eaec4a020a52d0ba8ba19f6e6ba01b0784a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/file_cache.py", + "size": 4153, + "sha1": null, + "md5": null, + "sha256": "9d854ab09b5787a8095ef767d625b2ae1c6f930a50acaf9e2a8311cee8b090a9", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/redis_cache.py", + "size": 856, + "sha1": null, + "md5": null, + "sha256": "1f17a5329342a3e758af67e2243c0cde1861466c5462d079b579b51a90004f86", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/__init__.py", + "size": 62, + "sha1": null, + "md5": null, + "sha256": "bb513f0eb4868ff9e71242b956096f12a3fc0fcd0aa6084b5562f403fa6ae350", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/__main__.py", + "size": 255, + "sha1": null, + "md5": null, + "sha256": "d64dc2afde6f0b1c464460e58eb5b7c0c76965d2f73617f4bb59fe936a9db026", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/cacert.pem", + "size": 282394, + "sha1": null, + "md5": null, + "sha256": "1a14f6e1fd11efff72e1863f8645f090eec1b616614460c210c3b7e3c13d4b5e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/core.py", + "size": 2315, + "sha1": null, + "md5": null, + "sha256": "8c1af02845a91b420a72ea332b4050d871c6a7c69d5c03b204f0bb75d811eaf3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/__init__.py", + "size": 1559, + "sha1": null, + "md5": null, + "sha256": "62c3f9c1096c1c9d9ab85d516497f2a624ab080eff6d08919b7112fcd23bebe6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/big5freq.py", + "size": 31254, + "sha1": null, + "md5": null, + "sha256": "0ffccae46cb3a15b117acd0790b2738a5b45417d1b2822ceac57bdff10ef3bff", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/big5prober.py", + "size": 1757, + "sha1": null, + "md5": null, + "sha256": "901c476dd7ad0693deef1ae56fe7bdf748a8b7ae20fde1922dddf6941eff8773", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/chardistribution.py", + "size": 9411, + "sha1": null, + "md5": null, + "sha256": "df0a164bad8aac6a282b2ab3e334129e315b2696ba57b834d9d68089b4f0725f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/charsetgroupprober.py", + "size": 3787, + "sha1": null, + "md5": null, + "sha256": "e9b0eef1822246e49c5f871af4881bd14ebd4c0d8f1975c37a3e82738ffd90ee", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/charsetprober.py", + "size": 5110, + "sha1": null, + "md5": null, + "sha256": "2929b0244ae3ca9ca3d1b459982e45e5e33b73c61080b6088d95e29ed64db2d8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/codingstatemachine.py", + "size": 3590, + "sha1": null, + "md5": null, + "sha256": "558a7fe9ccb2922e6c1e05c34999d75b8ab5a1e94773772ef40c904d7eeeba0f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/compat.py", + "size": 1134, + "sha1": null, + "md5": null, + "sha256": "3ca4f31e449bb5b1c3a92f4fcae8cc6d7ef8ab56bc98ca5e4130d5b10859311c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cp949prober.py", + "size": 1855, + "sha1": null, + "md5": null, + "sha256": "4d9e37e105fccf306c9d4bcbffcc26e004154d9d9992a10440bfe5370f5ff68c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/enums.py", + "size": 1661, + "sha1": null, + "md5": null, + "sha256": "0229b075bf5ab357492996853541f63a158854155de9990927f58ae6c358f1c5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/escprober.py", + "size": 3950, + "sha1": null, + "md5": null, + "sha256": "924caa560d58c370c8380309d9b765c9081415086e1c05bc7541ac913a0d5927", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/escsm.py", + "size": 10510, + "sha1": null, + "md5": null, + "sha256": "46e5e580dbd32036ab9ddbe594d0a4e56641229742c50d2471df4402ec5487ce", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/eucjpprober.py", + "size": 3749, + "sha1": null, + "md5": null, + "sha256": "883f09769d084918e08e254dedfd1ef3119e409e46336a1e675740f276d2794c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euckrfreq.py", + "size": 13546, + "sha1": null, + "md5": null, + "sha256": "fbb19d9af8167b3e3e78ee12b97a5aeed0620e2e6f45743c5af74503355a49fa", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euckrprober.py", + "size": 1748, + "sha1": null, + "md5": null, + "sha256": "32a14c4d05f15b81dbcc8a59f652831c1dc637c48fe328877a74e67fc83f3f16", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euctwfreq.py", + "size": 31621, + "sha1": null, + "md5": null, + "sha256": "368d56c9db853a00795484d403b3cbc82e6825137347231b07168a235975e8c0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euctwprober.py", + "size": 1747, + "sha1": null, + "md5": null, + "sha256": "d77a7a10fe3245ac6a9cfe221edc47389e91db3c47ab5fe6f214d18f3559f797", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/gb2312freq.py", + "size": 20715, + "sha1": null, + "md5": null, + "sha256": "257f25b3078a2e69c2c2693c507110b0b824affacffe411bbe2bc2e2a3ceae57", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/gb2312prober.py", + "size": 1754, + "sha1": null, + "md5": null, + "sha256": "806bc85a2f568438c4fb14171ef348cab9cbbc46cc01883251267ae4751fca5c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/hebrewprober.py", + "size": 13838, + "sha1": null, + "md5": null, + "sha256": "737499f8aee1bf2cc663a251019c4983027fb144bd93459892f318d34601605a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/jisfreq.py", + "size": 25777, + "sha1": null, + "md5": null, + "sha256": "be9989bf606ed09f209cc5513c730579f4d1be8fe16b59abc8b8a0f0207080e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/jpcntx.py", + "size": 19643, + "sha1": null, + "md5": null, + "sha256": "3d894da915104fc2ccddc4f91661c63f48a2b1c1654d6103f763002ef06e9e0a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langbulgarianmodel.py", + "size": 12839, + "sha1": null, + "md5": null, + "sha256": "d47a904bd3dbb678f5c508318ad24cbf0f17ea42abe4ea1c90d09959f110acf1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langcyrillicmodel.py", + "size": 17948, + "sha1": null, + "md5": null, + "sha256": "2ce0da8efb1eb47f3bc980c340a0360942d7507f3bb48db6ddd85f8e1f59c7d7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langgreekmodel.py", + "size": 12688, + "sha1": null, + "md5": null, + "sha256": "f18016edb53c6304896a9d2420949b3ccc35044ab31a35b3a9ca9fd168142800", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langhebrewmodel.py", + "size": 11345, + "sha1": null, + "md5": null, + "sha256": "2529ea984e44eb6b432d33d3bcba50b20e6038c3b83db75646f57b02f91cd070", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langhungarianmodel.py", + "size": 12592, + "sha1": null, + "md5": null, + "sha256": "4616a96121b997465a3be555e056a7e6c5b4591190aa1c0133ad72c77cb1c8e0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langthaimodel.py", + "size": 11290, + "sha1": null, + "md5": null, + "sha256": "f25d35ef71aefd6e86f26c6640e4c417896cd98744ec5c567f74244b11065c94", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langturkishmodel.py", + "size": 11102, + "sha1": null, + "md5": null, + "sha256": "5b6d9e44d26ca88eae5807f05d22955969c27ab62aac8f1d6504e6fccd254459", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/latin1prober.py", + "size": 5370, + "sha1": null, + "md5": null, + "sha256": "4b6228391845937f451053a54855ad815c9b4623fa87b0652e574755c94d914f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcharsetprober.py", + "size": 3413, + "sha1": null, + "md5": null, + "sha256": "011f797851fdbeea927ef2d064df8be628de6b6e4d3810a85eac3cb393bdc4b4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcsgroupprober.py", + "size": 2012, + "sha1": null, + "md5": null, + "sha256": "87a4d19e762ad8ec46d56743e493b2c5c755a67edd1b4abebc1f275abe666e1e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcssm.py", + "size": 25481, + "sha1": null, + "md5": null, + "sha256": "498df6c15205dc7cdc8d8dc1684b29cbd99eb5b3522b120807444a3e7eed8e92", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sbcharsetprober.py", + "size": 5657, + "sha1": null, + "md5": null, + "sha256": "2c34a90a5743085958c149069300f6a05c4b94f5885974f4f5a907ff63e263be", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sbcsgroupprober.py", + "size": 3546, + "sha1": null, + "md5": null, + "sha256": "d48a6b70207f935a9f9a7c460ba3016f110b94aa83dec716e92f1823075ec970", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sjisprober.py", + "size": 3774, + "sha1": null, + "md5": null, + "sha256": "208b7e9598f4589a8ae2b9946732993f8189944f0a504b45615b98f7a7a4e4c4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/universaldetector.py", + "size": 12485, + "sha1": null, + "md5": null, + "sha256": "a8bd35ef8952644e38d9e076d679e4b53f7f55c0327b4ee5685594794ae3b6d6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/utf8prober.py", + "size": 2766, + "sha1": null, + "md5": null, + "sha256": "21d0fcbf7cd63ac07c38b8b23e2fb2fdfab08a9445c55f4d73578a04b4ae204c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/version.py", + "size": 242, + "sha1": null, + "md5": null, + "sha256": "b29dc1d3c9ab0d707ea5fdcaf5fa89ff37831ce08b0bc46b9e04320c56a9ffb8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cli/__init__.py", + "size": 1, + "sha1": null, + "md5": null, + "sha256": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cli/chardetect.py", + "size": 2774, + "sha1": null, + "md5": null, + "sha256": "0c8f1d955dc5043d1cd1703fcb7b10efccfbe780d4bf527c9f7e11b438ce5cdc", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/__init__.py", + "size": 239, + "sha1": null, + "md5": null, + "sha256": "0ea8d71fd51154fdc827098cb7ba5e630e749ecd51340ca6201f7e5dd3c4155f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/ansi.py", + "size": 2524, + "sha1": null, + "md5": null, + "sha256": "162d2e9fe40ba919bebfba3f9ca88eab20bc3daa4124aec32d5feaf4b2ad4ced", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/ansitowin32.py", + "size": 10462, + "sha1": null, + "md5": null, + "sha256": "bbc41aa9da92ff16127cd90f33579124b1f3e893163e875a25a3f49b18070837", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/initialise.py", + "size": 1915, + "sha1": null, + "md5": null, + "sha256": "3e9ae8bc3371313aefa0d1c570bd8d663a47d97cc373c04bc4bc6212b7d49789", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/win32.py", + "size": 5404, + "sha1": null, + "md5": null, + "sha256": "6c9f0897d8f0681379049f1b98de85a18675418b8c2afda3f1f1ab5e1ed3263c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/winterm.py", + "size": 6438, + "sha1": null, + "md5": null, + "sha256": "db2ff66fb66cbf7e1f780b0febb98b39573e060ab9d667581a8e7bd55a6b96b3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/__init__.py", + "size": 581, + "sha1": null, + "md5": null, + "sha256": "def780936acfce7381da0b0aead8db6e1d1340c9861393fcd9e13dc17aba3489", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/compat.py", + "size": 41408, + "sha1": null, + "md5": null, + "sha256": "003039eb1880c5aaf7994eaa7a694184d6ecac53e8b174613b8e11cec6c93ea9", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/database.py", + "size": 51059, + "sha1": null, + "md5": null, + "sha256": "2a5d18bcf40a73839ca558bb939705ce2c9d335c4e2bc8aa7712c65e06d91d5e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/index.py", + "size": 21066, + "sha1": null, + "md5": null, + "sha256": "4972b3a5008445cb71603329fce2de7b67f42747b5f5984674222832551f5103", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/locators.py", + "size": 52100, + "sha1": null, + "md5": null, + "sha256": "73d13870311a709fee29bb84e41a805687285a9eabb2e0464e488d0d0ab7cd5e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/manifest.py", + "size": 14811, + "sha1": null, + "md5": null, + "sha256": "9d0121626828ade681673c85cf062c5f124046eddfa38124ba7535eb7535ea21", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/markers.py", + "size": 4387, + "sha1": null, + "md5": null, + "sha256": "e807377027c504445ec621125883979a0f9aa483fc9767ac69f3525f728ccbef", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/metadata.py", + "size": 38962, + "sha1": null, + "md5": null, + "sha256": "cf628fcb7877b5c0e76fd5ecee702a4393b3d1baa358050598a59c14a468a1d8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/resources.py", + "size": 10766, + "sha1": null, + "md5": null, + "sha256": "d851afd191c5d782978cb2252f447df7597241019c7b0392e2627ee67f895677", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/scripts.py", + "size": 17180, + "sha1": null, + "md5": null, + "sha256": "fcc023dec32ebf9ea4b8cf05b222165ea6d3d209ae98f19a391fdab4ece7e1ae", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/t32.exe", + "size": 96768, + "sha1": null, + "md5": null, + "sha256": "352df104254095ddf925514d99bfb5411c95b5386e90caf06557979f82e16844", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/t64.exe", + "size": 105984, + "sha1": null, + "md5": null, + "sha256": "a00a877acefcad45953343ad56a22152f7aaba5fcf2a10215d84169d47fbcd1d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/util.py", + "size": 59845, + "sha1": null, + "md5": null, + "sha256": "7f68d908fadc2c2b7a2dc9c2d20532f85babeb4b570fcade03b938ac3a47303c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/version.py", + "size": 23391, + "sha1": null, + "md5": null, + "sha256": "fe7ec5ea3baf40601c9fbebd13f4876bb7ce71fe44465115ca627f1233d1c06c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/w32.exe", + "size": 90112, + "sha1": null, + "md5": null, + "sha256": "949b6765d794c53656c9afc45b90d9a2cfcae6bb30444086b29225f19242217b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/w64.exe", + "size": 99840, + "sha1": null, + "md5": null, + "sha256": "d1a473a0dd813bd3565b810dcb8ff8bc7907478a994c564d55200925894e0d32", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/wheel.py", + "size": 41144, + "sha1": null, + "md5": null, + "sha256": "bfa0e7c13aa1347c2b11516bf3f61e8935ba1b87ed3ff7afb32c0d82b99d6f6a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/__init__.py", + "size": 274, + "sha1": null, + "md5": null, + "sha256": "6ea4bf753387eae5bd88681dd2ecdfa4f8e8eaf678c693d9ee4c9f649daf35ac", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/misc.py", + "size": 971, + "sha1": null, + "md5": null, + "sha256": "29679c20d75b14d3b148e3f57c617af340899da0ba4b87c146012d6984f0d228", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/shutil.py", + "size": 25707, + "sha1": null, + "md5": null, + "sha256": "217fc6d8d3eac1e70989b9080e37b4e1baaed31a4791f490d8668674456a3396", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/sysconfig.cfg", + "size": 2617, + "sha1": null, + "md5": null, + "sha256": "b3064ac6af516397bdaf73d70ab96f40f32cbce7625990531cb11ba92f0b24b5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/sysconfig.py", + "size": 26854, + "sha1": null, + "md5": null, + "sha256": "0501c595bea9b9b0a5fddbd3d4d8edcc8b61ca5a1f8ca8aca31db7f6cb438345", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/tarfile.py", + "size": 92628, + "sha1": null, + "md5": null, + "sha256": "221a7bad745c8db20ac3c08e9bdc1278f57d0111976d217d8065c0327d90f8a5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/__init__.py", + "size": 1160, + "sha1": null, + "md5": null, + "sha256": "058cdc282a9e1228b9db10eba8116bba19e6b66922b875c5c8587e720950f269", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_ihatexml.py", + "size": 16728, + "sha1": null, + "md5": null, + "sha256": "89f3b017ba57aa6c938485dcddba1673deace0c0decea46b455a7b1700d8505b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_inputstream.py", + "size": 32353, + "sha1": null, + "md5": null, + "sha256": "8c4acd012325920b3b32938cf557bf55d2c3272145c1e0232ee855bad673df75", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_tokenizer.py", + "size": 77040, + "sha1": null, + "md5": null, + "sha256": "d389a0036b0d4e78aeb65d9fc45bfe7a2e5b9ece2245a3f15575c787f1eb57fe", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_utils.py", + "size": 4931, + "sha1": null, + "md5": null, + "sha256": "0f1f402a7b64b118c54f5bde063ec8dfada97f93a021a4f4ce0970ab8dd19df5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/constants.py", + "size": 83464, + "sha1": null, + "md5": null, + "sha256": "2e5fb2ccb53f8dc8f2008fe1e7bce4a99eda416139b79c40e32fe3420a14521c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/html5parser.py", + "size": 117186, + "sha1": null, + "md5": null, + "sha256": "6a7afe697adefc899fae4437e5cfeb7ed297c42f34bc909110a7b4e93ab5e470", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/serializer.py", + "size": 15759, + "sha1": null, + "md5": null, + "sha256": "fcfa6f719174edcc04ef1afdb8a919aa1e5fe1411a23c96d094db13c9cda4e99", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/__init__.py", + "size": 109, + "sha1": null, + "md5": null, + "sha256": "9ea7e03bdd74df6f411152794f8a6c57042d8ddda2272117436f97f1cd58c705", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/_base.py", + "size": 1013, + "sha1": null, + "md5": null, + "sha256": "09ac9b63232ba3cb844506236f2dad4de4946ad9d60df5aba1437d37b7adcb9c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/py.py", + "size": 1775, + "sha1": null, + "md5": null, + "sha256": "c179902eb6517f833258dca0d26de1f359bd22784b47b189d34da6208661fbca", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/alphabeticalattributes.py", + "size": 919, + "sha1": null, + "md5": null, + "sha256": "95589973624c09c9578bfe6076ebe6773ad1c6d3b95e8f4e3676c70550acca45", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/base.py", + "size": 286, + "sha1": null, + "md5": null, + "sha256": "cfe214f590188e9b15b2a995b7b92e582eb78d1d7584332be8256bbee6a8f16d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/inject_meta_charset.py", + "size": 2945, + "sha1": null, + "md5": null, + "sha256": "7a00d75041d79801bde74e31cf42ba00b0e0624bd4ac2daad7961455e3655508", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/lint.py", + "size": 3643, + "sha1": null, + "md5": null, + "sha256": "8e4eaae7ac58d288e261fbe974ff8e6529bd793a9c01d46a842a0f22d7a63d80", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/optionaltags.py", + "size": 10588, + "sha1": null, + "md5": null, + "sha256": "f25593ef927468138798f81f9aa4c749f3e93cca74d53f3834abb409179dc5c1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/sanitizer.py", + "size": 26897, + "sha1": null, + "md5": null, + "sha256": "9baa069a40619060279f69d5e83e2113bf12099e961272bdaca759077b970487", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/whitespace.py", + "size": 1214, + "sha1": null, + "md5": null, + "sha256": "f1e5aa671778502e33945196ea2c98e9ffb6bae4fca4e09200b737219b7bfede", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/__init__.py", + "size": 679, + "sha1": null, + "md5": null, + "sha256": "034ad8e605c87b86c93a248644efe3fed1619e04413bc4193f33ed3f0e5d173a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/genshi.py", + "size": 1715, + "sha1": null, + "md5": null, + "sha256": "087dbba40b032a6bb864690052bc2dcbbbb429ab862c26512cf33368edcce6fa", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/sax.py", + "size": 1776, + "sha1": null, + "md5": null, + "sha256": "04a4bcc284139ca8aa79f7c7b310a152a2f8ab6651ff06f97dcf4c277cd00bcb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/__init__.py", + "size": 3592, + "sha1": null, + "md5": null, + "sha256": "032b12272bcf7e290230cb1356f6b1c2480389e10b0f975f47c149200baaee16", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/base.py", + "size": 14565, + "sha1": null, + "md5": null, + "sha256": "cfea39d6fb7daff9762031b9222a1338a1b36677b8172dff15cfbbcedace8782", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/dom.py", + "size": 8925, + "sha1": null, + "md5": null, + "sha256": "db6c216f40bbd735c8b1a8b999a9a0eaacc11228a070122f683cb802cc376add", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/etree.py", + "size": 12836, + "sha1": null, + "md5": null, + "sha256": "c39645a4a93a6c0c67af00f6fc1ac5e44542eefcf3d0bdcb322f52c6b6dcffcc", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/etree_lxml.py", + "size": 14766, + "sha1": null, + "md5": null, + "sha256": "f60a838ecf88c6c3e10586b9729befd85675299946f371a2baccb69459af2241", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/__init__.py", + "size": 5719, + "sha1": null, + "md5": null, + "sha256": "3813ed7354d4e661b2cb5f100ccc4a132604cf4c3115450d8f9bf4f978266216", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/base.py", + "size": 7476, + "sha1": null, + "md5": null, + "sha256": "a2e88eb2e4b3bc8d0a8337563fc3e5c4869236cf5f6a585b8a29c011cfd42096", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/dom.py", + "size": 1413, + "sha1": null, + "md5": null, + "sha256": "107c8547c0fc958367c8353d971fc82a2815251c9e7141ae6b498e8bb1c1ba47", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/etree.py", + "size": 4551, + "sha1": null, + "md5": null, + "sha256": "c68d4be66f55b647e91492b4a459a42d56a386a618562b15667de4f646293e42", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/etree_lxml.py", + "size": 6357, + "sha1": null, + "md5": null, + "sha256": "fdbd0b01558b715bbd59a53ffb0dc3f1fd08452a426e37faebb57edcd45d853c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/genshi.py", + "size": 2309, + "sha1": null, + "md5": null, + "sha256": "e03d8f1026799f764ddeabb78cc97dc98ec1f358e7400a414125657da22e61b0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/__init__.py", + "size": 58, + "sha1": null, + "md5": null, + "sha256": "f4db7bc69c9eb770e63ab3d41a8a03740c261d966ed6a500cb611a27dde41a24", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/codec.py", + "size": 3299, + "sha1": null, + "md5": null, + "sha256": "96f61bef2bbb3e102a15a00801d59cc2069623652682c794b9afb573402c1b40", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/compat.py", + "size": 232, + "sha1": null, + "md5": null, + "sha256": "47e876f43fba9ab9c9cdb5f1ca6ad6516ee2654bf2fb6e934306748a3e7b8b85", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/core.py", + "size": 11951, + "sha1": null, + "md5": null, + "sha256": "8c2a1a2dbddb036b52fc30f1f4fa46b8d4c46593768c0cc1dfaf5a3fe2076111", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/idnadata.py", + "size": 42350, + "sha1": null, + "md5": null, + "sha256": "826cc5c195a3766b3790a67f33fbf0cfbf8b3ff4828187d2784d37076d50a6c9", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/intranges.py", + "size": 1749, + "sha1": null, + "md5": null, + "sha256": "4d8d65a7164841610fead36a8d9905039860a0c58e8f53819a7506f22853f3b1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/package_data.py", + "size": 22, + "sha1": null, + "md5": null, + "sha256": "6f1063a4b9c4d3aff58d260a132e6cbce32ed7333738cced5d551bd6d3e5729d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/uts46data.py", + "size": 202084, + "sha1": null, + "md5": null, + "sha256": "94c770db3763907d495165cf3c47c5512613dc5ca3eb46c199f2efbf2e66ee4a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/__init__.py", + "size": 1118, + "sha1": null, + "md5": null, + "sha256": "da027072c4c8680b4233418c8b6ad4fbf63a9082de790baa464ad0db68d200d7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/_version.py", + "size": 20, + "sha1": null, + "md5": null, + "sha256": "86eee5ce667f0a539a38e991b166f8c689a1cd0e1422c2ecbeff0a63a532b071", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/exceptions.py", + "size": 1081, + "sha1": null, + "md5": null, + "sha256": "7424d67a2f1da64accb100dc8d093be004e5f47b08047d326edf3338f36a3187", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/ext.py", + "size": 6034, + "sha1": null, + "md5": null, + "sha256": "9d5d7d07313d05ef12247af1c5824715bbc41c969770fddabd1907569e70a2f3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/fallback.py", + "size": 37133, + "sha1": null, + "md5": null, + "sha256": "67c5778985143ea295cb85964e4eb856adc6d0fca54083a6956be09cc86691d5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/__about__.py", + "size": 736, + "sha1": null, + "md5": null, + "sha256": "3cd32c6999f851c087cae6e044e1f56e5e8296e76e3e3239905ad2a7f660925a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/__init__.py", + "size": 562, + "sha1": null, + "md5": null, + "sha256": "e9e9dba795e045f8c18ec23df9b9f4d078c77f94c7db53c330e2a4256f31c3ec", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_compat.py", + "size": 1128, + "sha1": null, + "md5": null, + "sha256": "31776c1a9484fd6f99ac7a02f3b6a7748e0b576140c14ec72cbf9e1defc28e15", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_structures.py", + "size": 2022, + "sha1": null, + "md5": null, + "sha256": "a339025fc43c7f6a84d4489cdd8890e1bb8355f833da261ebd8f5eed1db2de26", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_typing.py", + "size": 1824, + "sha1": null, + "md5": null, + "sha256": "560034000bec73deca0799c5f3dce8b9d3b208c12c57b165697cd96d8a849330", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/markers.py", + "size": 9491, + "sha1": null, + "md5": null, + "sha256": "57f45da10a8e51b49fcbbcbda36bd193b064cc0877ca7782f3672e5a92aba8e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/requirements.py", + "size": 4903, + "sha1": null, + "md5": null, + "sha256": "17dde1927ee2f0d29164ff85b5d4c8961cf53d4b118e17ba7916ec0575f4521e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/specifiers.py", + "size": 31944, + "sha1": null, + "md5": null, + "sha256": "b98a7d975dc5d0b7249d2e9de0deb4cad88180598884a89d78eabd027b314dca", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/tags.py", + "size": 24067, + "sha1": null, + "md5": null, + "sha256": "34a312dfb668fe75ab67182c0facdb5ec5e073d79d9fd9b5eb470188b98725d1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/utils.py", + "size": 1811, + "sha1": null, + "md5": null, + "sha256": "452865be78ced82b58483f2eae2df67eb30c14c4e607ede286cab5fa08732c4c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/version.py", + "size": 15470, + "sha1": null, + "md5": null, + "sha256": "0a76e6f8e3bd0ffa9df194c5c7315c8d26af7b14981599b279aa0fbccb2380f7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/__init__.py", + "size": 84, + "sha1": null, + "md5": null, + "sha256": "af9b80d74e8d1896b7b25b29683da6df6685a45522657fa667dbc89730043a9e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/_in_process.py", + "size": 8438, + "sha1": null, + "md5": null, + "sha256": "5eb28e4d44497626b947b8b78bf390992f3d2c04855c4dc74177d7eb7a990481", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/build.py", + "size": 3335, + "sha1": null, + "md5": null, + "sha256": "0cde28bb28ff6ddd3492738aaafd0a1d1b4dd3e25ecc9a0d3594267038b88ee9", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/check.py", + "size": 5961, + "sha1": null, + "md5": null, + "sha256": "62868d137a68246a73f7a6e2542630b5c0ec8701061361d153928ac9af727e96", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/colorlog.py", + "size": 4098, + "sha1": null, + "md5": null, + "sha256": "4e4f40b989bf70b17704a4c1a124c9b7d6d1af29f4685a232103b06df5544f14", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/compat.py", + "size": 780, + "sha1": null, + "md5": null, + "sha256": "33ee6ce15369f2b8f24fbe9967f89b9cf0f8e03615cd2425c821076b28ed0cfc", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/dirtools.py", + "size": 1129, + "sha1": null, + "md5": null, + "sha256": "da69009002f4991cff7a56058d12ae7a44c9562a47d734e7e2d6dfd440debfce", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/envbuild.py", + "size": 6041, + "sha1": null, + "md5": null, + "sha256": "b332941653b9d17d5a8507d7c33e210fd576544fdbcfd30b54f21e89db05a38c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/meta.py", + "size": 2463, + "sha1": null, + "md5": null, + "sha256": "f269cce650e74f8cd742905396225b4467deb07ee28a81f0a336c3c402cf4bd6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/wrappers.py", + "size": 10783, + "sha1": null, + "md5": null, + "sha256": "c855382e9ed32186e6b9539363ea579e5c8667717f82b222f8994b92918df069", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pkg_resources/__init__.py", + "size": 108277, + "sha1": null, + "md5": null, + "sha256": "5e91817ef4bd7da7c0e9b9b9af1eef9f1771b3bcaaca873f367a73280a6427ae", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pkg_resources/py31compat.py", + "size": 562, + "sha1": null, + "md5": null, + "sha256": "09193c7e488f4432ec6e2e6965c2ac1c8fff3db9a1ffde0bf26afd432f406f65", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/__init__.py", + "size": 4857, + "sha1": null, + "md5": null, + "sha256": "7dc6d0417a399e9d82a10ca1487e57a6b9227302d934b78f477b886a1ce748ed", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/bar.py", + "size": 2854, + "sha1": null, + "md5": null, + "sha256": "42e0ee54d7265e0a71b4db713b416aef6c4a8a0c4005a566c58181c3827767f1", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/counter.py", + "size": 1372, + "sha1": null, + "md5": null, + "sha256": "3339f206bbcf5ab3a519ee0c64094651bf6adda3837bafda35878013f54da180", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/spinner.py", + "size": 1380, + "sha1": null, + "md5": null, + "sha256": "93c25b0d6f784f4f965ee5dfc5920585da0d3d8a778df9e95ea0677d1bf97c6b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/__init__.py", + "size": 4465, + "sha1": null, + "md5": null, + "sha256": "a2bcefe3ed6e7a3303736bf72e74d59de20d1978b0a9749fac04a8141b186e51", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/__version__.py", + "size": 441, + "sha1": null, + "md5": null, + "sha256": "5f0932d453253242491a2741339d090bb14a728b16ce48c85be5a1406ac17453", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/_internal_utils.py", + "size": 1096, + "sha1": null, + "md5": null, + "sha256": "671dcf9c451c7327ec07e89ed759d95405bca82949cb4831d6a34c13bae04f5f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/adapters.py", + "size": 21548, + "sha1": null, + "md5": null, + "sha256": "7be6e6284029355a85772971b8c2497e2687765992ff3856848304ce51ef1ae7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/api.py", + "size": 6496, + "sha1": null, + "md5": null, + "sha256": "3e51ccf874f73d0e65cae7e8786995fa7271462ed49d4c86561ece57b07d5d5e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/auth.py", + "size": 10207, + "sha1": null, + "md5": null, + "sha256": "38ca092152b244bcbd4c7afdd72f2bc72b19b9c9703c1f8ad57835cc1a265214", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/certs.py", + "size": 465, + "sha1": null, + "md5": null, + "sha256": "9d7455abd0ed1a6bffd4061bc234eef54ae001c749bf4e59be435e6a82ce6716", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/compat.py", + "size": 2045, + "sha1": null, + "md5": null, + "sha256": "2d05ae091e2a5e4eb0efea90a295f2cf458d1d47400f8d24d262a768011fd7e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/cookies.py", + "size": 18430, + "sha1": null, + "md5": null, + "sha256": "63e6ca5fa4ef5b716762513a02ed125ed55559c68d745bee030431c3e1b48932", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/exceptions.py", + "size": 3173, + "sha1": null, + "md5": null, + "sha256": "77d7c9270f1814107d5731bdaa1bf12ee3b1e9b7b773f0f06dc93e75550401cb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/help.py", + "size": 3578, + "sha1": null, + "md5": null, + "sha256": "4893d57285dea3b29f2b803124de5e1554028ebd229bceed5369fbb9b2ec92c5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/hooks.py", + "size": 757, + "sha1": null, + "md5": null, + "sha256": "411786cb2d1b45caf9ae4c02b8e6cd6a46d8b1cec492229e0701b8a877a4af64", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/models.py", + "size": 34287, + "sha1": null, + "md5": null, + "sha256": "fed2886ebb1c6c6bda4dd5f55070b045a89898f17d54122e05ec9daf8431d538", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/packages.py", + "size": 695, + "sha1": null, + "md5": null, + "sha256": "9e32665627d8e1a49cb6e5b73cfe441510b18c4c0c4433ba27f7de1b674a5ac2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/sessions.py", + "size": 29316, + "sha1": null, + "md5": null, + "sha256": "381b7042cd6f8e4075c5a985762fe9e72f0155e5f5e8126841cc12c31fd8ddf2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/status_codes.py", + "size": 4188, + "sha1": null, + "md5": null, + "sha256": "813efd3dbb3f7108c1829f9fbeb520835767d8340edf66c38f84c89e39cc3d27", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/structures.py", + "size": 3005, + "sha1": null, + "md5": null, + "sha256": "9ac02dafd9aad49c4777e251ca220b7dd165a5b270bef16e3f7adf5104ff4311", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/utils.py", + "size": 30176, + "sha1": null, + "md5": null, + "sha256": "541b3df5cbd5f19dbd5865de599a87cd9f34fe7bb5030c2363325f7b4c1022fb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/__init__.py", + "size": 537, + "sha1": null, + "md5": null, + "sha256": "b2a30ecb809b549422686f5b08f8f4a009ed180572f9159d3df55a0bd5c32044", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/providers.py", + "size": 4547, + "sha1": null, + "md5": null, + "sha256": "4d90c298bf8873e47925121963c1b814b1b9c41db7e370740dfb8aedac3662ac", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/reporters.py", + "size": 1405, + "sha1": null, + "md5": null, + "sha256": "64f4899d57caf16bd74db5fc8c4d0dade9f4fbf1e0f729b87a90943ed53c6345", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/resolvers.py", + "size": 15018, + "sha1": null, + "md5": null, + "sha256": "9504c671cfb67e01db99d88bcde34353156619ce591639002fa26b56a9ea248c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/structs.py", + "size": 2016, + "sha1": null, + "md5": null, + "sha256": "cab76177e9fb0deadc8a63c67255dedb4ae0aa1971c3c3e7c42d3099c5ced7d6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/compat/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/compat/collections_abc.py", + "size": 127, + "sha1": null, + "md5": null, + "sha256": "9ad4e4a6bdc67f7386bd4d4f0fc62ebeb2518556e2a3157cd93fa78853e85f7a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/__init__.py", + "size": 747, + "sha1": null, + "md5": null, + "sha256": "ac9d69bbddf71e052dc9e78d8aeb283dde6324e3cd85a2878524a5777a3c010a", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/common.py", + "size": 242, + "sha1": null, + "md5": null, + "sha256": "56205c70076e3fa79934901bd4f3a14618ce022e7a4c3b0d8162754e381702e8", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/decoder.py", + "size": 38696, + "sha1": null, + "md5": null, + "sha256": "6ada579b2142ccd1a2aa191c60bc9206e25090f7921c3cc1cf8eec11a5f56a6c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/encoder.py", + "size": 9955, + "sha1": null, + "md5": null, + "sha256": "7cfa8bc8574f01a9b5ed7f5210bcf64cca7d69f7e47c70a681667144a726ce16", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/ordered.py", + "size": 378, + "sha1": null, + "md5": null, + "sha256": "516b791246bdd0859505876f2e06393d79e405c558a478e7c3d4faeeb33ce53f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/tz.py", + "size": 618, + "sha1": null, + "md5": null, + "sha256": "0eb020237c19c5988670bb95fe5f2e780fe73eb628c50de1640f6d2528d646c4", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/__init__.py", + "size": 2683, + "sha1": null, + "md5": null, + "sha256": "add15908ed4bedef3ceb5653be8f008922b0c427bd4a7590510c09e7df5857d7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/_collections.py", + "size": 10792, + "sha1": null, + "md5": null, + "sha256": "1a8b95b0dcf083a8c00d94e68a6308ea8aa6c0a4acc27328f5d879b4635558ee", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/connection.py", + "size": 14461, + "sha1": null, + "md5": null, + "sha256": "1659fc6bf6e47a074d32416848ec322343c9bcbd4eab35543ba89f8a128e4e97", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/connectionpool.py", + "size": 35725, + "sha1": null, + "md5": null, + "sha256": "7a075a5fe0dbfcb55789f0f1bf7258d1d1c8a50a83bf4c02d3ff447a1f0590f3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/exceptions.py", + "size": 7172, + "sha1": null, + "md5": null, + "sha256": "0f626f69beccee6fe7d2b9e6066ab8f35a5aa154f7d95bd5781e95790334cbec", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/fields.py", + "size": 8553, + "sha1": null, + "md5": null, + "sha256": "92ba03efa40af867471d6edffc050de17c430b73903c8d8516b4bd7922f8042b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/filepost.py", + "size": 2440, + "sha1": null, + "md5": null, + "sha256": "be3d2a6eba53d40173bef5b84ae0bc3399098b0ef07ed1dc4abfbb6fc5293e9c", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/poolmanager.py", + "size": 17861, + "sha1": null, + "md5": null, + "sha256": "896100206ad5346a0e990c9f885c02a86f88c98cba18843e8c9f500ac5fd962e", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/request.py", + "size": 6018, + "sha1": null, + "md5": null, + "sha256": "861a07bc411ab7277d4e7e446c68d0d1e9a7f8434c0b2639f75c8d5939de20d0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/response.py", + "size": 28221, + "sha1": null, + "md5": null, + "sha256": "7a8d527e49f6c78e05b6380fdeac300ec1bd6a4f38b29400c441b2ecebdde0f7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_appengine_environ.py", + "size": 957, + "sha1": null, + "md5": null, + "sha256": "6c36f2384856d8228b25c42a00a032ac41cdf9a925b321c52aaeaf17c645b269", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/appengine.py", + "size": 11034, + "sha1": null, + "md5": null, + "sha256": "81f74ae13ec24629fbbfd1d18470db0e1f876e4eba8470d67a8cfb9d5dcf268f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/ntlmpool.py", + "size": 4160, + "sha1": null, + "md5": null, + "sha256": "6b8d3603018dfcb97737ee2eaff012e94ad4fb2714b659d8aa8045efa94e460f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/pyopenssl.py", + "size": 16582, + "sha1": null, + "md5": null, + "sha256": "f609b99290b449c6c3096a1b782ae1e4b0ea4bc1e053c14d866939bfca90e41b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/securetransport.py", + "size": 32401, + "sha1": null, + "md5": null, + "sha256": "bc10c58d29c7da059afb3b4c2956a2c16e3a2b59a50d92aabe8fd50289df75c6", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/socks.py", + "size": 7036, + "sha1": null, + "md5": null, + "sha256": "9f30cc80320525656e6ca1eabc89f6f922823bdd618492273fdd968070a11b30", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/bindings.py", + "size": 16886, + "sha1": null, + "md5": null, + "sha256": "9ae96559815a82105d45695ae87614f930601514cf2c111fc63de3a656de2664", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/low_level.py", + "size": 11956, + "sha1": null, + "md5": null, + "sha256": "57b1a7ba3c67599876376b0cb15e4de1df489b29a89249b7cc1c20b7beff6d21", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/__init__.py", + "size": 108, + "sha1": null, + "md5": null, + "sha256": "87804b843e2d2da071d5a75a0ed2977eea6c82a634c162d76ff7f5ff256557a0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/six.py", + "size": 32536, + "sha1": null, + "md5": null, + "sha256": "69dc78cfe78cfc3d15beed0822a573140090feec7d97ae32ec391211f6f1083b", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/backports/__init__.py", + "size": 0, + "sha1": null, + "md5": null, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/backports/makefile.py", + "size": 1418, + "sha1": null, + "md5": null, + "sha256": "d34e70aef1fefe95929d316a436b1dcf3878cd50ad414510e26476632c707340", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py", + "size": 688, + "sha1": null, + "md5": null, + "sha256": "cb080a32d7c78b5f83ad79733df540873b0bcf3a9c2bb193e9e2e076875ed458", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py", + "size": 5696, + "sha1": null, + "md5": null, + "sha256": "aef40342f8aa40bb4f241e8c7c48000670458f79d77eded92770f1f810b40106", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/__init__.py", + "size": 1038, + "sha1": null, + "md5": null, + "sha256": "6d635a6affce4fed4befeb319b9f5c19be7dac339195b85bff89e876e3399b45", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/connection.py", + "size": 4637, + "sha1": null, + "md5": null, + "sha256": "36cc5400a43df062b2c2d6befb3839ec2755a5e4c223a37e184942abbf0397c5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/queue.py", + "size": 497, + "sha1": null, + "md5": null, + "sha256": "9b24d7dc90c79ed8252903417f76fa75ab071feb85f96e7dbf319242215d01f2", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/request.py", + "size": 3815, + "sha1": null, + "md5": null, + "sha256": "0beebe0167dfc591b4dc07511a8639f6eaac9f809522d294ea08f1cfb1dcdcc7", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/response.py", + "size": 2573, + "sha1": null, + "md5": null, + "sha256": "fd66d342bf31450b89b98dab4c867155d243ea69c43ad42ea6368afdb17f563f", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/retry.py", + "size": 15543, + "sha1": null, + "md5": null, + "sha256": "df06efed277360d3b13dc0621643c2b9b4db2b5ffabd649ea739ce5e2ae151f0", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/ssl_.py", + "size": 14523, + "sha1": null, + "md5": null, + "sha256": "37b82ab768aacca06c58699ceb561e28d48fae2e8db36899fcc0f9855db2f2d5", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/timeout.py", + "size": 9947, + "sha1": null, + "md5": null, + "sha256": "dea6b0528f9366ae2aeedc9e453a0c20e74d1843818ce39056aee71e72ebc8fe", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/url.py", + "size": 13981, + "sha1": null, + "md5": null, + "sha256": "4b863203058a24f8c5144082ee5f55a7d10aa911f55c06feb90140367d536a4d", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/wait.py", + "size": 5406, + "sha1": null, + "md5": null, + "sha256": "938e8acea218bb7567ce56b9616dc4bed22736553f432705a900208483b1a008", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/__init__.py", + "size": 10579, + "sha1": null, + "md5": null, + "sha256": "a8e04922e3f2ff8072607e96fdb360245faa610d83a14f9d2ac0eee724560978", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/labels.py", + "size": 8979, + "sha1": null, + "md5": null, + "sha256": "e003bf2b14dd76a1adacbf67b3b9003e36f409c37ac6c088c5b2b7ec763daf71", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/mklabels.py", + "size": 1305, + "sha1": null, + "md5": null, + "sha256": "19821ecb09e968b9cfd064a273c2c55a0774515bcefe5d4d73a62817ef3b47fe", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/tests.py", + "size": 6563, + "sha1": null, + "md5": null, + "sha256": "3ad18bca384d6357ef916d46bcb27f155f59a2a0bd027ca3afbab79314dbccdb", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/x_user_defined.py", + "size": 4307, + "sha1": null, + "md5": null, + "sha256": "c8ea9649d9a9cad19f52087f67a258803361a1cf81007cb279e4f5e45af8dad3", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/LICENSE.txt", + "size": 1090, + "sha1": null, + "md5": null, + "sha256": "5ba21fbb0964f936ad7d15362d1ed6d4931cc8c8f9ff2d4d91190e109be74431", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/METADATA", + "size": 3708, + "sha1": null, + "md5": null, + "sha256": "64cad08d4df485f455455884e2aa15af06730d24721824fc39d9039244cc06ff", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "9064fbe0b5b245466b2f85602e1ebf835d8879597ff6ef5956169dae05d95046", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/entry_points.txt", + "size": 125, + "sha1": null, + "md5": null, + "sha256": "1ed7c33b0a5496bf6cef78ea2d0eb017d574ff4aaf517270081cfb570c7451ed", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/top_level.txt", + "size": 4, + "sha1": null, + "md5": null, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/legacy/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/certs.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/winterm.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/help.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/legacy.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/virtualenv.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/controller.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/charsetgroupprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/reporters.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_structures.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/_in_process.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/lint.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/dom.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/entrypoints.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/deprecation.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/low_level.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/markers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/bar.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/compatibility_tags.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/idnadata.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/check.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/status_codes.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/counter.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/html5parser.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/markers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/appengine.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langcyrillicmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/link.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/etree_lxml.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "../../../bin/pip-3.8", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/direct_url.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/package_data.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/spinners.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/build_env.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/utf8prober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/wait.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/retrying.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/_internal_utils.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/requirements.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/genshi.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/scheme.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/filewrapper.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/download.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/initialise.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "../../../bin/pip3", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/search_scope.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/configuration.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/enums.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/bindings.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/pyopenssl.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/ansi.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/heuristics.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/encoder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/download.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langbulgarianmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/py.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/uninstall.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/main.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/cookies.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/legacy/resolver.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/specifiers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/securetransport.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_install.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/gb2312freq.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/wrapper.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/command_context.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/hooks.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/chardistribution.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/wheel_builder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/common.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/__version__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/prepare.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pyparsing.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/optionaltags.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euckrprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/adapters.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_ihatexml.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/distutils_args.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/exceptions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/compat/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/bazaar.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/escsm.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/ext.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/base_command.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/encoding.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/models.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/misc.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/tz.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cli/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/completion.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/contextlib2.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/compat/collections_abc.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/packaging.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/ordered.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/exceptions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/urls.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/editable_legacy.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/constants.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/typing.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/filesystem.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/index.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/req_command.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/legacy/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/main.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langhebrewmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/escprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/install/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/package_finder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pkg_resources/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/colorlog.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/version.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sbcsgroupprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distro.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/jisfreq.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/locations.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/etree_lxml.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/build.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/version.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/genshi.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/serializer.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/redis_cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_tokenizer.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/hash.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/structs.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/connectionpool.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/dom.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/sax.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/backports/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/subversion.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/structures.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/git.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/exceptions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/serialize.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/url.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/temp_dir.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/sdist.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/mercurial.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/check.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langthaimodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/requirements.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/help.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/utils.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/core.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/wheel_legacy.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/six.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/whitespace.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/candidates.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/_base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/check.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/distributions/installed.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/etree.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langturkishmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/direct_url_helpers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/pyproject.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/_collections.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/connection.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/shutil.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/decoder.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/adapter.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/pkg_resources.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcharsetprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/auth.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pkg_resources/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treeadapters/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/metadata_legacy.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/show.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/appdirs.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/mklabels.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/queue.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/retry.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/labels.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/_version.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/compat/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/sanitizer.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/backports/makefile.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/gb2312prober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/models.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/core.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_file.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/collector.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/packages.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cp949prober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/build/metadata.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/toml/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_inputstream.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "../../../bin/pip", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/intranges.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_appengine_environ.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/auth.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/setuptools_build.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/database.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/sysconfig.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/codec.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/inject_securetransport.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/metadata.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pkg_resources/py31compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/parser.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/backports/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/session.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/filepost.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treewalkers/etree.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/charsetprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/latin1prober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/dirtools.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.virtualenv", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcssm.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/utils.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/timeout.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/util.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/caches/file_cache.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/provider.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/mbcsgroupprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/meta.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/constructors.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/index.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/format_control.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/big5prober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/hashes.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/cachecontrol/_cmd.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/misc.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/vcs/versioncontrol.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/__main__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/win32.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/alphabeticalattributes.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_uninstall.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/xmlrpc.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/tests.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/resolver.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/exceptions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/uts46data.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/cmdoptions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_trie/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/progress_bars.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/ssl_.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/progress/spinner.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/search.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/operations/freeze.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/network/lazy_wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/__about__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langgreekmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/logging.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/resolvelib/factory.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/envbuild.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/resolution/base.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/jpcntx.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/codingstatemachine.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/_securetransport/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/resources.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/resolvers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/fields.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/main_parser.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/index/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/parallel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/debug.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/colorama/ansitowin32.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sbcharsetprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/autocompletion.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/request.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/selection_prefs.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cli/chardetect.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/request.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/target_python.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/resolvelib/providers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/tags.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/freeze.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/manifest.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euctwprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euckrfreq.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/x_user_defined.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/wheel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/status_codes.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/appdirs.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/sessions.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/six.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/ntlmpool.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/sjisprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/datetime.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/certifi/__main__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/self_outdated_check.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/eucjpprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/_backport/tarfile.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/treebuilders/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/response.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/list.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/filters/inject_meta_charset.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_tracker.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/connection.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/cli/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/idna/compat.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "../../../bin/pip3.8", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/fallback.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/universaldetector.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/hebrewprober.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/pep517/wrappers.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/install.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/big5freq.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/api.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/subprocess.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/filetypes.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/scripts.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/req_set.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip-20.2.2.dist-info/INSTALLER", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/webencodings/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/msgpack/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/req/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/cli/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/locators.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/__init__.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/requests/utils.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/ipaddress.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/_typing.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/langhungarianmodel.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/chardet/euctwfreq.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/glibc.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/html5lib/_utils.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/models/candidate.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/utils/unpacking.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/packaging/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/distlib/version.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/commands/configuration.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/poolmanager.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/contrib/socks.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_internal/__pycache__", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "pip/_vendor/urllib3/util/response.cpython-38.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": { + "Documentation": "Documentation, https://pip.pypa.io", + "Changelog": "Changelog, https://pip.pypa.io/en/stable/news/" + }, "dependencies": [], - "purl": "pkg:pypi/pip@20.2.2", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/pip", "repository_download_url": "https://pypi.org/packages/source/p/pip/pip-20.2.2.tar.gz", - "api_data_url": "https://pypi.org/pypi/pip/20.2.2/json" + "api_data_url": "https://pypi.org/pypi/pip/20.2.2/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/pip@20.2.2" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info-expected.json index 651e30c48c2..44aa7617d29 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info-expected.json @@ -47,8 +47,216 @@ "license": "Apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "plugincode-21.1.21.dist-info/AUTHORS.rst", + "size": 267, + "sha1": null, + "md5": null, + "sha256": "96f54b7f596bb8fe45880940c1c03d65ecadb6af71615998ad3b463c69e4e616", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/CHANGELOG.rst", + "size": 296, + "sha1": null, + "md5": null, + "sha256": "1b03ac729fc4cb14654bf14624ebf033a1ad886404997ff763694bd0d3511377", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/INSTALLER", + "size": 4, + "sha1": null, + "md5": null, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/METADATA", + "size": 1648, + "sha1": null, + "md5": null, + "sha256": "c25fa304c12c2f78ec9f2c01946d432ab4b3800cca283d207027a0481523bab7", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/NOTICE", + "size": 752, + "sha1": null, + "md5": null, + "sha256": "48cec42c5f9c9321de7b1683497ecfd84a836e36246fa4bc73f09672c74cc973", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/WHEEL", + "size": 92, + "sha1": null, + "md5": null, + "sha256": "3aa464174798e461ecb0ca2b16395b4c8ab4ef6be91e917ad1f21003a952f710", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/apache-2.0.LICENSE", + "size": 11357, + "sha1": null, + "md5": null, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode-21.1.21.dist-info/top_level.txt", + "size": 11, + "sha1": null, + "md5": null, + "sha256": "c68f6ae59a5f15150b912687eba258d807651417a8473918b2005d17174255eb", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__init__.py", + "size": 9494, + "sha1": null, + "md5": null, + "sha256": "6b4bc351c7b56c078c8fa2150bb484ae5c15c87c4d4f1ae6bf201b056e48ec99", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/__init__.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/location_provider.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/output.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/output_filter.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/post_scan.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/pre_scan.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/__pycache__/scan.cpython-36.pyc", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/location_provider.py", + "size": 6209, + "sha1": null, + "md5": null, + "sha256": "bf53ea4b198f5dc782b3bfebc5159d013c325943efa7d82e23c9f57be94f6127", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/output.py", + "size": 2830, + "sha1": null, + "md5": null, + "sha256": "d6f0ff03cdf3aaa7394d269d4086006a775e672ef5de0e0042bd8dab5e262624", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/output_filter.py", + "size": 1541, + "sha1": null, + "md5": null, + "sha256": "300c6a057569c671279ffa20342db70c63ceb8badee5ae69c32ae55a2ae62b42", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/post_scan.py", + "size": 1366, + "sha1": null, + "md5": null, + "sha256": "49bb401382c6f3f24ef173880f461265fda0723233fd9544e250ba961ff6d321", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/pre_scan.py", + "size": 1331, + "sha1": null, + "md5": null, + "sha256": "ed83e58ba949ee5a416bc35ce5e2eb0f81299eaacb35e401c07f8ac40c01e378", + "sha512": null, + "extra_data": {} + }, + { + "path": "plugincode/scan.py", + "size": 3799, + "sha1": null, + "md5": null, + "sha256": "3bd20b359371e057793c232b258b3a2decb27fb3e3052a518176c05ec37c9152", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -124,9 +332,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/plugincode@21.1.21", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/plugincode", "repository_download_url": "https://pypi.org/packages/source/p/plugincode/plugincode-21.1.21.tar.gz", - "api_data_url": "https://pypi.org/pypi/plugincode/21.1.21/json" + "api_data_url": "https://pypi.org/pypi/plugincode/21.1.21/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/plugincode@21.1.21" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json index 57c47222534..9da37212bd8 100644 --- a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json @@ -37,7 +37,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT license", "classifiers": [ @@ -45,8 +45,117 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "anonapi/__init__.py", + "size": 174, + "sha1": null, + "md5": null, + "sha256": "f1504e1080e9632d0915284ac7911f0c17699b7ec7e3c7100f50b476f70e04cc", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi/anon.py", + "size": 20963, + "sha1": null, + "md5": null, + "sha256": "063d21326ac8804039a02c59aef6d8a5427deb6b70367739113e3a9f9aa9e0f8", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi/client.py", + "size": 8760, + "sha1": null, + "md5": null, + "sha256": "655986fbd8a218ddbcca09f7a925c81c5bf4437e2947d94e8d85f8189bf0e36c", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi/objects.py", + "size": 545, + "sha1": null, + "md5": null, + "sha256": "646ba0fed816cb282981ef74a13d967db49fc3cf69161c5319c998a9102d0d77", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi/settings.py", + "size": 4535, + "sha1": null, + "md5": null, + "sha256": "fde17bfd73e416b2b27a75f3bc2926092a208093993a99bc094a823a3c384e1a", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/AUTHORS.rst", + "size": 183, + "sha1": null, + "md5": null, + "sha256": "12e371c87dc7eca8ec20ea8ed1cc6cc447a28695c138785472e21af8f977b7c6", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/LICENSE", + "size": 1096, + "sha1": null, + "md5": null, + "sha256": "23c1a546d526776adc2af49f02048318fb433dfa5cd64045f511405051860b9f", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/METADATA", + "size": 2813, + "sha1": null, + "md5": null, + "sha256": "1e3440a9c2bbf717c82f56d28f2bab29f997bd957c96adae3579a672b694fbdd", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "0a2850bc29ec1994011801cb11431fd08740e1f45db92fcd0544cc8024edbcf3", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/entry_points.txt", + "size": 44, + "sha1": null, + "md5": null, + "sha256": "1d1968430e1007e93f245304da0b3b18f32f92be3e3dd3c8a790fa28204c6418", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/top_level.txt", + "size": 8, + "sha1": null, + "md5": null, + "sha256": "858c66b5750f609b53381138225e23895dd94df54184c2000b9ff97ca601b937", + "sha512": null, + "extra_data": {} + }, + { + "path": "anonapi-0.0.19.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [ { @@ -59,9 +168,10 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/anonapi@0.0.19", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/anonapi", "repository_download_url": "https://pypi.org/packages/source/a/anonapi/anonapi-0.0.19.tar.gz", - "api_data_url": "https://pypi.org/pypi/anonapi/0.0.19/json" + "api_data_url": "https://pypi.org/pypi/anonapi/0.0.19/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/anonapi@0.0.19" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/wheel/parse-wheel-expected.json b/tests/packagedcode/data/pypi/wheel/parse-wheel-expected.json index 491e2c9e4fc..98a280e8342 100644 --- a/tests/packagedcode/data/pypi/wheel/parse-wheel-expected.json +++ b/tests/packagedcode/data/pypi/wheel/parse-wheel-expected.json @@ -45,9 +45,7 @@ ] }, "notice_text": null, - "root_path": null, "dependencies": [], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": "pkg:pypi/atomicwrites@1.2.1", diff --git a/tests/packagedcode/test_pypi.py b/tests/packagedcode/test_pypi.py index d087647404e..5fa44f709a1 100644 --- a/tests/packagedcode/test_pypi.py +++ b/tests/packagedcode/test_pypi.py @@ -21,156 +21,156 @@ from scancode_config import REGEN_TEST_FIXTURES -class TestPyPiDevelop(PackageTester): +class TestPyPiDevelopEggInfoPkgInfo(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_python_pkg_info_is_package_data_file(self): test_file = self.get_test_loc('pypi/develop/scancode_toolkit.egg-info/PKG-INFO') - assert pypi.MetadataFile.is_package_data_file(test_file) + assert pypi.PythonEditableInstallationPkgInfoFile.is_datafile(test_file) def test_develop_with_parse_metadata(self): test_file = self.get_test_loc('pypi/develop/scancode_toolkit.egg-info/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonEditableInstallationPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/develop/scancode_toolkit.egg-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_develop_with_parse(self): test_file = self.get_test_loc('pypi/develop/scancode_toolkit.egg-info/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonEditableInstallationPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/develop/scancode_toolkit.egg-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) -class TestPyPiMetadata(PackageTester): +class TestPyPiPkgInfoAndMetadata(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') - def test_parse_metadata_format_v10(self): + def test_parse_sdist_pkg_infometadata_format_v10(self): test_file = self.get_test_loc('pypi/metadata/v10/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/v10/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_metadata_format_v11(self): + def test_parse_sdist_pkg_infometadata_format_v11(self): test_file = self.get_test_loc('pypi/metadata/v11/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/v11/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_metadata_format_v12(self): + def test_parse_sdist_pkg_infometadata_format_v12(self): test_file = self.get_test_loc('pypi/metadata/v12/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/v12/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_metadata_format_v20(self): + def test_parse_sdist_pkg_infometadata_format_v20(self): test_file = self.get_test_loc('pypi/metadata/v20/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/v20/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_metadata_format_v21(self): + def test_parse_sdist_pkg_infometadata_format_v21(self): test_file = self.get_test_loc('pypi/metadata/v21/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/v21/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_pkg_dash_info_basic(self): + def test_parse_sdist_pkg_info_basic(self): test_file = self.get_test_loc('pypi/metadata/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/metadata/PKG-INFO-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_python_metadata_is_package_data_file(self): - test_file = self.get_test_loc('pypi/metadata/METADATA') - assert pypi.MetadataFile.is_package_data_file(test_file) + test_file = self.get_test_loc('pypi/dist-info-metadata/scan/.dist-info/METADATA') + assert pypi.PythonInstalledWheelMetadataFile.is_datafile(test_file) def test_parse_metadata_basic(self): - test_file = self.get_test_loc('pypi/metadata/METADATA') - package = pypi.MetadataFile.recognize(test_file) - expected_loc = self.get_test_loc('pypi/metadata/METADATA-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + test_file = self.get_test_loc('pypi/dist-info-metadata/scan/.dist-info/METADATA') + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) + expected_loc = self.get_test_loc('pypi/dist-info-metadata/METADATA-expected.json') + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) -class TestPypiArchive(PackageTester): +class TestPypiWheelAndEggArchive(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_python_bdist_whl_is_package_data_file(self): test_file = self.get_test_loc('pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl') - assert pypi.BinaryDistArchive.is_package_data_file(test_file) + assert pypi.PypiWheelHandler.is_datafile(test_file) def test_python_bdist_egg_is_package_data_file(self): test_file = self.get_test_loc('pypi/archive/commoncode-21.5.12-py3.9.egg') - assert pypi.BinaryDistArchive.is_package_data_file(test_file) + assert pypi.PypiEggHandler.is_datafile(test_file) def test_parse_archive_with_wheelfile(self): test_file = self.get_test_loc('pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl') - package = pypi.BinaryDistArchive.recognize(test_file) + package = pypi.PypiWheelHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_wheelfile(self): test_file = self.get_test_loc('pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl') - package = pypi.BinaryDistArchive.recognize(test_file) + package = pypi.PypiWheelHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/archive/atomicwrites-1.2.1-py2.py3-none-any.whl-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_eggfile(self): test_file = self.get_test_loc('pypi/archive/commoncode-21.5.12-py3.9.egg') - package = pypi.BinaryDistArchive.recognize(test_file) + package = pypi.PypiEggHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/archive/commoncode-21.5.12-py3.9.egg-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) -class TestPypiUnpackedWheel(PackageTester): +class TestPypiInstalledWheel(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_parse_with_unpacked_wheel_meta_v20_1(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/Jinja2-2.10.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v20_2(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/python_mimeparse-1.6.0.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v20_3(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/toml-0.10.1.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v20_4(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.0/urllib3-1.26.4.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v21_1(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/haruka_bot-1.2.3.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v21_2(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/pip-20.2.2.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v21_3(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/plugincode-21.1.21.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_with_unpacked_wheel_meta_v21__with_sources(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info/METADATA') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) class TestPypiUnpackedSdist(PackageTester): @@ -178,27 +178,27 @@ class TestPypiUnpackedSdist(PackageTester): def test_parse_metadata_unpacked_sdist_metadata_v10(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_metadata_unpacked_sdist_metadata_v10_subdir(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3/PyJPString.egg-info/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonEditableInstallationPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-1.0/PyJPString-0.0.3-subdir-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_with_name(self): test_file = self.get_test_loc('pypi/setup.py/with_name-setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/with_name-setup.py.expected.json', must_exist=False) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_without_name(self): test_file = self.get_test_loc('pypi/setup.py/without_name-setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/without_name-setup.py.expected.json', must_exist=False) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_get_setup_py_args_with_name(self): test_file = self.get_test_loc('pypi/setup.py/with_name-setup.py') @@ -214,35 +214,35 @@ def test_get_setup_py_args_without_name(self): def test_parse_metadata_unpacked_sdist_metadata_v11_1(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-1.1/python-mimeparse-1.6.0-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_metadata_unpacked_sdist_metadata_v11_2(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-1.1/pyup-django-0.4.0-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_metadata_unpacked_sdist_metadata_v12(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-1.2/anonapi-0.0.19-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_metadata_unpacked_sdist_metadata_v21(self): test_file = self.get_test_loc('pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12/PKG-INFO') - package = pypi.MetadataFile.recognize(test_file) + package = pypi.PythonSdistPkgInfoFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_sdist/metadata-2.1/commoncode-21.5.12-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) -class TestRequirementsFile(PackageTester): +class TestPipRequirementsFileHandler(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_python_requirements_is_package_data_file(self): test_file = self.get_test_loc('pypi/requirements_txt/basic/requirements.txt') - assert pypi.RequirementsFile.is_package_data_file(test_file) + assert pypi.PipRequirementsFileHandler.is_datafile(test_file) def test_get_requirements_txt_dependencies(self): test_file = self.get_test_loc('pypi/requirements_txt/simple/requirements.txt') @@ -255,117 +255,117 @@ def test_get_requirements_txt_dependencies(self): def test_parse_dependency_file_basic(self): test_file = self.get_test_loc('pypi/requirements_txt/basic/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/basic/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_pinned(self): test_file = self.get_test_loc('pypi/requirements_txt/pinned/sample-requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/pinned/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_dev(self): test_file = self.get_test_loc('pypi/requirements_txt/dev/requirements-dev.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/dev/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_requirements_in(self): test_file = self.get_test_loc('pypi/requirements_txt/requirements_in/requirements.in') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/requirements_in/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_eol_comment(self): test_file = self.get_test_loc('pypi/requirements_txt/eol_comment/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/eol_comment/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_complex(self): test_file = self.get_test_loc('pypi/requirements_txt/complex/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/complex/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_editable(self): test_file = self.get_test_loc('pypi/requirements_txt/editable/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/editable/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_double_extras(self): test_file = self.get_test_loc('pypi/requirements_txt/double_extras/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/double_extras/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_repeated(self): test_file = self.get_test_loc('pypi/requirements_txt/repeated/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/repeated/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_vcs_eggs(self): test_file = self.get_test_loc('pypi/requirements_txt/vcs_eggs/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/vcs_eggs/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_local_paths_and_files(self): test_file = self.get_test_loc('pypi/requirements_txt/local_paths_and_files/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/local_paths_and_files/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_urls_wth_checksums(self): test_file = self.get_test_loc('pypi/requirements_txt/urls_wth_checksums/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/urls_wth_checksums/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_mixed(self): test_file = self.get_test_loc('pypi/requirements_txt/mixed/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/mixed/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_comments_and_empties(self): test_file = self.get_test_loc('pypi/requirements_txt/comments_and_empties/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/comments_and_empties/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_many_specs(self): test_file = self.get_test_loc('pypi/requirements_txt/many_specs/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/many_specs/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_vcs_editable(self): test_file = self.get_test_loc('pypi/requirements_txt/vcs_editable/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/vcs_editable/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_vcs_extras_require(self): test_file = self.get_test_loc('pypi/requirements_txt/vcs_extras_require/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/vcs_extras_require/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_vcs_git(self): test_file = self.get_test_loc('pypi/requirements_txt/vcs-git/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/vcs-git/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_dependency_file_with_invalid_does_not_fail(self): test_file = self.get_test_loc('pypi/requirements_txt/invalid_spec/requirements.txt') - package = pypi.RequirementsFile.recognize(test_file) + package = pypi.PipRequirementsFileHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/requirements_txt/invalid_spec/output.expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) class TestPyPiPipfile(PackageTester): @@ -373,40 +373,40 @@ class TestPyPiPipfile(PackageTester): def test_pipfile_lock_sample1(self): test_file = self.get_test_loc('pypi/pipfile.lock/sample1/Pipfile.lock') - package = pypi.PipfileLock.recognize(test_file) + package = pypi.PipfileLockHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/pipfile.lock/sample1/Pipfile.lock-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_pipfile_lock_sample2(self): test_file = self.get_test_loc('pypi/pipfile.lock/sample2/Pipfile.lock') - package = pypi.PipfileLock.recognize(test_file) + package = pypi.PipfileLockHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/pipfile.lock/sample2/Pipfile.lock-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_pipfile_lock_sample3(self): test_file = self.get_test_loc('pypi/pipfile.lock/sample3/Pipfile.lock') - package = pypi.PipfileLock.recognize(test_file) + package = pypi.PipfileLockHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/pipfile.lock/sample3/Pipfile.lock-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_pipfile_lock_sample4(self): test_file = self.get_test_loc('pypi/pipfile.lock/sample4/Pipfile.lock') - package = pypi.PipfileLock.recognize(test_file) + package = pypi.PipfileLockHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/pipfile.lock/sample4/Pipfile.lock-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_pipfile_lock_sample5(self): test_file = self.get_test_loc('pypi/pipfile.lock/sample5/Pipfile.lock') - package = pypi.PipfileLock.recognize(test_file) + package = pypi.PipfileLockHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/pipfile.lock/sample5/Pipfile.lock-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_file_type(self): filename = pypi.get_dparse2_supported_file_name('Pipfile.lock') assert filename == 'Pipfile.lock' -class TestIsRequirementsFile(object): +class TestIsPipRequirementsFileHandler(object): requirement_location = [ 'requirements.txt', @@ -429,12 +429,19 @@ class TestIsRequirementsFile(object): ] @pytest.mark.parametrize('location', requirement_location) - def test_is_requirements_file(self, location): - assert pypi.is_requirements_file(location) + def test_is_requirements_file(self, location, monkeypatch): + # monkey patch filetype.is_file to pretend this is a real file + from commoncode import filetype + monkeypatch.setattr(filetype, "is_file", lambda f: True) + assert pypi.PipRequirementsFileHandler.is_datafile(location) - def test_is_not_requirements_file(self): - assert not pypi.is_requirements_file('req.txt') - assert not pypi.is_requirements_file('requiremenst.py') + def test_is_not_requirements_file(self, monkeypatch): + # monkey patch filetype.is_file to pretend this is a real file + from commoncode import filetype + monkeypatch.setattr(filetype, "is_file", lambda f: True) + + assert not pypi.PipRequirementsFileHandler.is_datafile('req.txt') + assert not pypi.PipRequirementsFileHandler.is_datafile('requiremenst.py') def get_setup_py_test_files(test_dir): @@ -460,7 +467,7 @@ class TestSetupPyVersions(object): @pytest.mark.parametrize('test_loc, expected_loc', list(get_setup_py_test_files(test_data_dir))) def test_parse_setup_py_with_computed_versions(self, test_loc, expected_loc, regen=REGEN_TEST_FIXTURES): - package = pypi.SetupPy.recognize(test_loc) + package = pypi.PythonSetupPyHandler.parse(test_loc) if package: results = package.to_dict() else: @@ -485,153 +492,153 @@ class TestPyPiSetupPy(PackageTester): @skipIf(on_windows, 'Somehow this fails on Windows') def test_parse_setup_py_arpy(self): test_file = self.get_test_loc('pypi/setup.py/arpy_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/arpy_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_pluggy(self): test_file = self.get_test_loc('pypi/setup.py/pluggy_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/pluggy_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_pygtrie(self): # this uses a kwargs dict test_file = self.get_test_loc('pypi/setup.py/pygtrie_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/pygtrie_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_basic(self): test_file = self.get_test_loc('pypi/setup.py/simple-setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_boolean2_py(self): test_file = self.get_test_loc('pypi/setup.py/boolean2_py_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/boolean2_py_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_container_check(self): test_file = self.get_test_loc('pypi/setup.py/container_check_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/container_check_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_fb303_py(self): test_file = self.get_test_loc('pypi/setup.py/fb303_py_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/fb303_py_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_frell_src(self): # setup.py is a temaplte with @vars test_file = self.get_test_loc('pypi/setup.py/frell_src_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/frell_src_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_gyp(self): test_file = self.get_test_loc('pypi/setup.py/gyp_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/gyp_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_interlap(self): test_file = self.get_test_loc('pypi/setup.py/interlap_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/interlap_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_mb(self): test_file = self.get_test_loc('pypi/setup.py/mb_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/mb_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_ntfs(self): test_file = self.get_test_loc('pypi/setup.py/ntfs_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/ntfs_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_nvchecker(self): test_file = self.get_test_loc('pypi/setup.py/nvchecker_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/nvchecker_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_oi_agents_common_code(self): test_file = self.get_test_loc('pypi/setup.py/oi_agents_common_code_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/oi_agents_common_code_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_packageurl_python(self): test_file = self.get_test_loc('pypi/setup.py/packageurl_python_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/packageurl_python_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_pipdeptree(self): test_file = self.get_test_loc('pypi/setup.py/pipdeptree_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/pipdeptree_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_pydep(self): test_file = self.get_test_loc('pypi/setup.py/pydep_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/pydep_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_pyrpm_2(self): test_file = self.get_test_loc('pypi/setup.py/pyrpm_2_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/pyrpm_2_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_python_publicsuffix(self): test_file = self.get_test_loc('pypi/setup.py/python_publicsuffix_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/python_publicsuffix_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_repology_py_libversion(self): test_file = self.get_test_loc('pypi/setup.py/repology_py_libversion_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/repology_py_libversion_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_saneyaml(self): test_file = self.get_test_loc('pypi/setup.py/saneyaml_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/saneyaml_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_setuppycheck(self): test_file = self.get_test_loc('pypi/setup.py/setuppycheck_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/setuppycheck_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_url_py(self): test_file = self.get_test_loc('pypi/setup.py/url_py_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/url_py_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_venv(self): test_file = self.get_test_loc('pypi/setup.py/venv_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/venv_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_setup_py_xmltodict(self): test_file = self.get_test_loc('pypi/setup.py/xmltodict_setup.py') - package = pypi.SetupPy.recognize(test_file) + package = pypi.PythonSetupPyHandler.parse(test_file) expected_loc = self.get_test_loc('pypi/setup.py/xmltodict_setup.py-expected.json') - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) From adc0862fe04dabc11cf6e54d764fc8f981a61b44 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:26:54 +0200 Subject: [PATCH 30/36] Adopt new handler design for Dart pub packages We now have these data file handlers: * DartPubspecYamlHandler * DartPubspecLockHandler And we assemble these in Packages correctly. Signed-off-by: Philippe Ombredanne --- src/packagedcode/pubspec.py | 203 ++++++++---------- .../locks/dart-pubspec.lock-expected.json | 7 +- .../locks/stock-pubspec.lock-expected.json | 7 +- .../locks/weather-pubspec.lock-expected.json | 7 +- .../pubspec/mini-pubspec.lock-expected.json | 7 +- .../specs/authors-pubspec.yaml-expected.json | 9 +- ...s-versions-dict-pubspec.yaml-expected.json | 9 +- .../many-deps-pubspec.yaml-expected.json | 9 +- .../mini-deps-pubspec.yaml-expected.json | 9 +- .../specs/publish-pubspec.yaml-expected.json | 9 +- .../specs/simple-pubspec.yaml-expected.json | 9 +- tests/packagedcode/test_pubspec.py | 13 +- 12 files changed, 137 insertions(+), 161 deletions(-) diff --git a/src/packagedcode/pubspec.py b/src/packagedcode/pubspec.py index f239425ac71..694bf9b4972 100644 --- a/src/packagedcode/pubspec.py +++ b/src/packagedcode/pubspec.py @@ -7,40 +7,17 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging -import sys import warnings -import attr import saneyaml -from commoncode import filetype from packageurl import PackageURL from packagedcode import models from packagedcode.utils import combine_expressions - -TRACE = False - - -def logger_debug(*args): - pass - - -logger = logging.getLogger(__name__) - -if TRACE: - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - - def logger_debug(*args): - return logger.debug(''.join(isinstance(a, str) and a or repr(a) for a in args)) - """ Collect data from Dart pub packages. See https://dart.dev/tools/pub/pubspec -""" -""" TODO: - license is only in a LICENSE file https://dart.dev/tools/pub/publishing#preparing-to-publish @@ -56,34 +33,51 @@ def logger_debug(*args): See https://github.com/dart-lang/pub/blob/master/doc/repository-spec-v2.md """ +# FIXME: warnings reported here DO NOT work. We should have a better way -@attr.s() -class PubspecPackageData(models.PackageData): - default_type = 'pubspec' - default_primary_language = 'dart' - default_web_baseurl = 'https://pub.dev/packages' - default_download_baseurl = 'https://pub.dartlang.org/packages' - default_api_baseurl = 'https://pub.dev/api/packages' - def repository_homepage_url(self, baseurl=default_web_baseurl): - return f'{baseurl}/{self.name}/versions/{self.version}' +class BaseDartPubspecHandler(models.DatafileHandler): + + @classmethod + def assemble(cls, package_data, resource, codebase): + datafile_name_patterns = \ + DartPubspecYamlHandler.path_patterns + DartPubspecLockHandler.path_patterns + + if resource.has_parent(): + dir_resource=resource.parent(codebase) + else: + dir_resource=resource - def repository_download_url(self, baseurl=default_download_baseurl): - # A URL should be in the form of: - # https://pub.dartlang.org/packages/url_launcher/versions/6.0.9.tar.gz - # And it may resolve to: - # https://storage.googleapis.com/pub-packages/packages/http-0.13.2.tar.gz - # as seen in the pub.dev web pages - return f'{baseurl}/{self.name}/versions/{self.version}.tar.gz' + yield from cls.assemble_from_many_datafiles( + datafile_name_patterns=datafile_name_patterns, + directory=dir_resource, + codebase=codebase, + ) - def api_data_url(self, baseurl=default_api_baseurl): - return f'{baseurl}/{self.name}/versions/{self.version}' + @classmethod + def compute_normalized_license(cls, package): + return compute_normalized_license(package.declared_license) - def compute_normalized_license(self): - return compute_normalized_license(self.declared_license) +class DartPubspecYamlHandler(BaseDartPubspecHandler): + datasource_id = 'pubspec_yaml' + path_patterns = ('*pubspec.yaml',) + default_package_type = 'pubspec' + default_primary_language = 'dart' + description = 'Dart pubspec manifest' + documentation_url = 'https://dart.dev/tools/pub/pubspec' -def compute_normalized_license(declared_license, location=None): + @classmethod + def parse(cls, location): + with open(location) as inp: + pubspec_data = saneyaml.load(inp.read()) + + package_data = build_package(pubspec_data) + if package_data: + yield package_data + + +def compute_normalized_license(declared_license): """ Return a normalized license expression string detected from a list of declared license items. @@ -106,79 +100,27 @@ def compute_normalized_license(declared_license, location=None): return combine_expressions(detected_licenses) -@attr.s() -class PubspecYaml(PubspecPackageData, models.PackageDataFile): - - file_patterns = ('*pubspec.yaml',) - extensions = ('.yaml',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return file_endswith(location, 'pubspec.yaml') - - @classmethod - def recognize(cls, location, compute_normalized_license=False): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ - with open(location) as inp: - package_data = saneyaml.load(inp.read()) - - package = build_package(cls, package_data) - if package and compute_normalized_license: - package.compute_normalized_license() - yield package - - -def file_endswith(location, endswith): - """ - Check if the file at ``location`` ends with ``endswith`` string or tuple. - """ - return filetype.is_file(location) and location.endswith(endswith) - - -@attr.s() -class PubspecLock(PubspecPackageData, models.PackageDataFile): - - file_patterns = ('*pubspec.lock',) - extensions = ('.lock',) - - @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return file_endswith(location, 'pubspec.lock') +class DartPubspecLockHandler(BaseDartPubspecHandler): + datasource_id = 'pubspec_lock' + path_patterns = ('*pubspec.lock',) + default_package_type = 'pubspec' + default_primary_language = 'dart' + description = 'Dart pubspec lockfile' + documentation_url = 'https://web.archive.org/web/20220330081004/https://gpalma.pt/blog/what-is-the-pubspec-lock/' @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with open(location) as inp: locks_data = saneyaml.load(inp.read()) - yield cls(dependencies=list(collect_locks(locks_data))) - - -@attr.s() -class PubspecPackage(PubspecPackageData, models.Package): - """ - A Pubspec Package that is created out of one/multiple pubspec package - manifests. - """ + dependencies = list(collect_locks(locks_data)) - @property - def manifests(self): - return [ - PubspecYaml, - PubspecLock - ] + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + primary_language=cls.default_primary_language, + dependencies=dependencies + ) def collect_locks(locks_data): @@ -303,10 +245,17 @@ def build_dep(name, version, scope, is_runtime=True, is_optional=False): if version.replace('.', '').isdigit(): # version is pinned exactly if it is only made of dots and digits - purl = PackageURL(type='pubspec', name=name, version=version) + purl = PackageURL( + type='pubspec', + name=name, + version=version, + ) is_resolved = True else: - purl = PackageURL(type='pubspec', name=name) + purl = PackageURL( + type='pubspec', + name=name, + ) is_resolved = False dep = models.DependentPackage( @@ -320,7 +269,7 @@ def build_dep(name, version, scope, is_runtime=True, is_optional=False): return dep -def build_package(cls, pubspec_data): +def build_package(pubspec_data): """ Return a package object from a package data mapping or None """ @@ -332,6 +281,18 @@ def build_package(cls, pubspec_data): vcs_url = pubspec_data.get('repository') download_url = pubspec_data.get('archive_url') + api_data_url = name and version and f'https://pub.dev/api/packages/{name}/versions/{version}' + repository_homepage_url = name and version and f'https://pub.dev/packages/{name}/versions/{version}' + + # A URL should be in the form of: + # https://pub.dartlang.org/packages/url_launcher/versions/6.0.9.tar.gz + # And it may resolve to: + # https://storage.googleapis.com/pub-packages/packages/http-0.13.2.tar.gz + # as seen in the pub.dev web pages + repository_download_url = name and version and f'https://pub.dartlang.org/packages/{name}/versions/{version}.tar.gz' + + download_url = download_url or repository_download_url + # Author and authors are deprecated authors = [] author = pubspec_data.get('author') @@ -385,9 +346,13 @@ def add_to_extra_if_present(_key): add_to_extra_if_present('executables') add_to_extra_if_present('publish_to') - package = cls( + package = models.PackageData( + datasource_id=DartPubspecYamlHandler.datasource_id, + type=DartPubspecYamlHandler.default_primary_language, + primary_language=DartPubspecYamlHandler.default_primary_language, name=name, version=version, + download_url=download_url, vcs_url=vcs_url, description=description, declared_license=declared_license, @@ -395,10 +360,12 @@ def add_to_extra_if_present(_key): homepage_url=homepage_url, dependencies=package_dependencies, extra_data=extra_data, + repository_homepage_url=repository_homepage_url, + api_data_url=api_data_url, + repository_download_url=repository_download_url, ) - if not download_url: - package.download_url = package.repository_download_url() + if not package.license_expression and package.declared_license: + package.license_expression = models.compute_normalized_license(package.declared_license) return package - diff --git a/tests/packagedcode/data/pubspec/locks/dart-pubspec.lock-expected.json b/tests/packagedcode/data/pubspec/locks/dart-pubspec.lock-expected.json index 055ad3a13de..66e4ec31d3d 100644 --- a/tests/packagedcode/data/pubspec/locks/dart-pubspec.lock-expected.json +++ b/tests/packagedcode/data/pubspec/locks/dart-pubspec.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -543,9 +543,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pubspec_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/locks/stock-pubspec.lock-expected.json b/tests/packagedcode/data/pubspec/locks/stock-pubspec.lock-expected.json index 89648c39b1a..0b0cdf4edca 100644 --- a/tests/packagedcode/data/pubspec/locks/stock-pubspec.lock-expected.json +++ b/tests/packagedcode/data/pubspec/locks/stock-pubspec.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -417,9 +417,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pubspec_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/locks/weather-pubspec.lock-expected.json b/tests/packagedcode/data/pubspec/locks/weather-pubspec.lock-expected.json index b4e6a52ab90..e49bd6d1346 100644 --- a/tests/packagedcode/data/pubspec/locks/weather-pubspec.lock-expected.json +++ b/tests/packagedcode/data/pubspec/locks/weather-pubspec.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -660,9 +660,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pubspec_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/mini-pubspec.lock-expected.json b/tests/packagedcode/data/pubspec/mini-pubspec.lock-expected.json index 3c25829541d..625a34f758f 100644 --- a/tests/packagedcode/data/pubspec/mini-pubspec.lock-expected.json +++ b/tests/packagedcode/data/pubspec/mini-pubspec.lock-expected.json @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -93,9 +93,10 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pubspec_lock", + "purl": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/authors-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/authors-pubspec.yaml-expected.json index 753a2c4d6eb..3e70646a4c7 100644 --- a/tests/packagedcode/data/pubspec/specs/authors-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/authors-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "openapi", "version": "1.0.0", @@ -40,8 +40,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -72,9 +72,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/openapi@1.0.0", "repository_homepage_url": "https://pub.dev/packages/openapi/versions/1.0.0", "repository_download_url": "https://pub.dartlang.org/packages/openapi/versions/1.0.0.tar.gz", - "api_data_url": "https://pub.dev/api/packages/openapi/versions/1.0.0" + "api_data_url": "https://pub.dev/api/packages/openapi/versions/1.0.0", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/openapi@1.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/deps-versions-dict-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/deps-versions-dict-pubspec.yaml-expected.json index 78a447141be..0f57673c97f 100644 --- a/tests/packagedcode/data/pubspec/specs/deps-versions-dict-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/deps-versions-dict-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "foobar", "version": "1.0.0+1", @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -75,9 +75,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/foobar@1.0.0%2B1", "repository_homepage_url": "https://pub.dev/packages/foobar/versions/1.0.0+1", "repository_download_url": "https://pub.dartlang.org/packages/foobar/versions/1.0.0+1.tar.gz", - "api_data_url": "https://pub.dev/api/packages/foobar/versions/1.0.0+1" + "api_data_url": "https://pub.dev/api/packages/foobar/versions/1.0.0+1", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/foobar@1.0.0%2B1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/many-deps-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/many-deps-pubspec.yaml-expected.json index 6e16b76e1d4..2215118f9e8 100644 --- a/tests/packagedcode/data/pubspec/specs/many-deps-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/many-deps-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "built_collection", "version": "5.1.0", @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/built_collection@5.1.0", "repository_homepage_url": "https://pub.dev/packages/built_collection/versions/5.1.0", "repository_download_url": "https://pub.dartlang.org/packages/built_collection/versions/5.1.0.tar.gz", - "api_data_url": "https://pub.dev/api/packages/built_collection/versions/5.1.0" + "api_data_url": "https://pub.dev/api/packages/built_collection/versions/5.1.0", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/built_collection@5.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/mini-deps-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/mini-deps-pubspec.yaml-expected.json index 07b8fa7f402..a1c519e445f 100644 --- a/tests/packagedcode/data/pubspec/specs/mini-deps-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/mini-deps-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "flutter_oss_licenses", "version": "1.0.1", @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "executables": { "generate": "" @@ -70,9 +70,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/flutter_oss_licenses@1.0.1", "repository_homepage_url": "https://pub.dev/packages/flutter_oss_licenses/versions/1.0.1", "repository_download_url": "https://pub.dartlang.org/packages/flutter_oss_licenses/versions/1.0.1.tar.gz", - "api_data_url": "https://pub.dev/api/packages/flutter_oss_licenses/versions/1.0.1" + "api_data_url": "https://pub.dev/api/packages/flutter_oss_licenses/versions/1.0.1", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/flutter_oss_licenses@1.0.1" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/publish-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/publish-pubspec.yaml-expected.json index 6ee7fcd90b9..727629cb1df 100644 --- a/tests/packagedcode/data/pubspec/specs/publish-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/publish-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "mock_name", "version": "1.1.0", @@ -33,8 +33,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": { "executables": { "abide": "" @@ -88,9 +88,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/mock_name@1.1.0", "repository_homepage_url": "https://pub.dev/packages/mock_name/versions/1.1.0", "repository_download_url": "https://pub.dartlang.org/packages/mock_name/versions/1.1.0.tar.gz", - "api_data_url": "https://pub.dev/api/packages/mock_name/versions/1.1.0" + "api_data_url": "https://pub.dev/api/packages/mock_name/versions/1.1.0", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/mock_name@1.1.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/pubspec/specs/simple-pubspec.yaml-expected.json b/tests/packagedcode/data/pubspec/specs/simple-pubspec.yaml-expected.json index 854129a73d2..a8e4be6e806 100644 --- a/tests/packagedcode/data/pubspec/specs/simple-pubspec.yaml-expected.json +++ b/tests/packagedcode/data/pubspec/specs/simple-pubspec.yaml-expected.json @@ -1,6 +1,6 @@ [ { - "type": "pubspec", + "type": "dart", "namespace": null, "name": "painter", "version": "2.0.0", @@ -25,8 +25,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -57,9 +57,10 @@ "resolved_package": {} } ], - "purl": "pkg:pubspec/painter@2.0.0", "repository_homepage_url": "https://pub.dev/packages/painter/versions/2.0.0", "repository_download_url": "https://pub.dartlang.org/packages/painter/versions/2.0.0.tar.gz", - "api_data_url": "https://pub.dev/api/packages/painter/versions/2.0.0" + "api_data_url": "https://pub.dev/api/packages/painter/versions/2.0.0", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/painter@2.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_pubspec.py b/tests/packagedcode/test_pubspec.py index 58e6496576c..b87e5e18070 100644 --- a/tests/packagedcode/test_pubspec.py +++ b/tests/packagedcode/test_pubspec.py @@ -14,7 +14,6 @@ from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES - test_data_dir = os.path.join(os.path.dirname(__file__), 'data') @@ -23,29 +22,29 @@ class TestPubspecDatadriven(PackageTester): def test_pubspec_lock_is_package_data_file(self): test_file = self.get_test_loc('pubspec/locks/dart-pubspec.lock') - assert pubspec.PubspecLock.is_package_data_file(test_file) + assert pubspec.DartPubspecLockHandler.is_datafile(test_file) def test_pubspec_yaml_is_package_data_file(self): test_file = self.get_test_loc('pubspec/specs/authors-pubspec.yaml') - assert pubspec.PubspecYaml.is_package_data_file(test_file) + assert pubspec.DartPubspecYamlHandler.is_datafile(test_file) def test_parse_lock(self): test_loc = self.get_test_loc('pubspec/mini-pubspec.lock') expected_loc = self.get_test_loc('pubspec/mini-pubspec.lock-expected.json', must_exist=False) - package_data = pubspec.PubspecLock.recognize(test_loc) - self.check_packages(package_data, expected_loc, regen=REGEN_TEST_FIXTURES) + package_data = pubspec.DartPubspecLockHandler.parse(test_loc) + self.check_packages_data(package_data, expected_loc, regen=REGEN_TEST_FIXTURES) def pub_tester(location,): manifests = [] - for package_data in pubspec.PubspecYaml.recognize(location): + for package_data in pubspec.DartPubspecYamlHandler.parse(location): manifests.append(package_data.to_dict()) return manifests def lock_tester(location,): manifests = [] - for package_data in pubspec.PubspecLock.recognize(location): + for package_data in pubspec.DartPubspecLockHandler.parse(location): manifests.append(package_data.to_dict()) return manifests From 2cd448c79f535e9b051cf77d759995cd1dd24a45 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:28:28 +0200 Subject: [PATCH 31/36] Adopt new handler design for README files We now have this data file handler: * ReadmeHandler Signed-off-by: Philippe Ombredanne --- src/packagedcode/readme.py | 138 ++++++++---------- .../android/basic/README.android.expected | 7 +- .../chromium/basic/README.chromium.expected | 7 +- .../facebook/basic/README.facebook.expected | 7 +- .../capital-filename/README.FACEBOOK.expected | 7 +- .../README.facebook.expected | 7 +- .../README.facebook.expected | 7 +- .../missing-type/README.facebook.expected | 7 +- .../project-as-name/README.facebook.expected | 7 +- .../README.facebook.expected | 73 ++++----- .../README.facebook.expected | 7 +- .../setuptools/README.facebook.expected | 7 +- .../README.facebook.expected | 7 +- .../google/basic/README.google.expected | 7 +- .../basic/README.thirdparty.expected | 7 +- tests/packagedcode/test_readme.py | 66 ++++----- 16 files changed, 182 insertions(+), 186 deletions(-) diff --git a/src/packagedcode/readme.py b/src/packagedcode/readme.py index 6b89069f175..05214b8de9f 100644 --- a/src/packagedcode/readme.py +++ b/src/packagedcode/readme.py @@ -7,119 +7,101 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import logging - -import attr -from commoncode import filetype from commoncode import fileutils from packagedcode import models """ -Handle README.* package metadata +Handle README.*-style semi-structured package metadata. +These are seen in Android, Chromium and a few more places. """ -TRACE = False +# Common README field name mapped to known PackageData field name +PACKAGE_FIELD_BY_README_FIELD = { + 'name': 'name', + 'project': 'name', + 'version': 'version', -logger = logging.getLogger(__name__) + 'copyright': 'copyright', -if TRACE: - import sys - logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - logger.setLevel(logging.DEBUG) + 'download link': 'download_url', + 'downloaded from': 'download_url', + 'homepage': 'homepage_url', + 'website': 'homepage_url', + 'repo': 'homepage_url', + 'source': 'homepage_url', + 'upstream': 'homepage_url', + 'url': 'homepage_url', + 'project url': 'homepage_url', -README_MAPPING = { - 'name': ['name', 'project'], - 'version': ['version'], - 'homepage_url': ['project url', 'repo', 'source', 'upstream', 'url', 'website'], - 'download_url': ['download link', 'downloaded from'], - 'declared_license': ['license'], + 'licence': 'declared_license', + 'license': 'declared_license', } -@attr.s() -class ReadmePackageData(models.PackageData): - default_type = 'readme' - - @classmethod - def get_package_root(cls, manifest_resource, codebase): - return manifest_resource.parent(codebase) - - def compute_normalized_license(self): - return models.compute_normalized_license(self.declared_license) - -@attr.s() -class ReadmeManifest(ReadmePackageData, models.PackageDataFile): - - file_patterns = ( - 'README.android', - 'README.chromium', - 'README.facebook', - 'README.google', - 'README.thirdparty', +class ReadmeHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'readme' + default_package_type = 'readme' + path_patterns = ( + '*/README.android', + '*/README.chromium', + '*/README.facebook', + '*/README.google', + '*/README.thirdparty', ) @classmethod - def is_package_data_file(cls, location): - """ - Return True if the file at ``location`` is likely a manifest of this type. - """ - return (filetype.is_file(location) - and fileutils.file_name(location).lower() in [ - 'readme.android', - 'readme.chromium', - 'readme.facebook', - 'readme.google', - 'readme.thirdparty' - ] - ) - - @classmethod - def recognize(cls, location): - """ - Yield one or more Package manifest objects given a file ``location`` pointing to a - package archive, manifest or similar. - """ + def parse(cls, location): with open(location, encoding='utf-8') as loc: readme_manifest = loc.read() - package = build_package(cls, readme_manifest) + package_data = build_package(readme_manifest) - if not package.name: - # If no name was detected for the Package, then we use the basename of - # the parent directory as the Package name + if not package_data.name: + # If no name was detected for the Package, then we use the basename + # of the parent directory as the Package name parent_dir = fileutils.parent_directory(location) parent_dir_basename = fileutils.file_base_name(parent_dir) - package.name = parent_dir_basename + package_data.name = parent_dir_basename - yield package + yield package_data -def build_package(cls, readme_manifest): +def build_package(readme_manifest): """ Return a Package object from a readme_manifest mapping (from a README.chromium file or similar) or None. """ - package = cls() + package = models.PackageData( + datasource_id=ReadmeHandler.datasource_id, + type=ReadmeHandler.default_package_type, + ) for line in readme_manifest.splitlines(): - key, sep, value = line.partition(':') + line = line.strip() + + if ':' in line: + key, _sep, value = line.partition(':') + elif '=' in line: + key, _sep, value = line.partition('=') + else: + key = None + value = None + + if key: + key = key.lower().strip() + if value: + value = value.strip() if not key or not value: continue + package_key = PACKAGE_FIELD_BY_README_FIELD.get(key) + if not package_key: + continue + setattr(package, package_key, value) - # Map the key, value pairs to the Package - key, value = key.lower(), value.strip() - if key in README_MAPPING['name']: - package.name = value - if key in README_MAPPING['version']: - package.version = value - if key in README_MAPPING['homepage_url']: - package.homepage_url = value - if key in README_MAPPING['download_url']: - package.download_url = value - if key in README_MAPPING['declared_license']: - package.declared_license = value + if not package.license_expression and package.declared_license: + package.license_expression = models.compute_normalized_license(package.declared_license) return package diff --git a/tests/packagedcode/data/readme/android/basic/README.android.expected b/tests/packagedcode/data/readme/android/basic/README.android.expected index e421fc38cc9..dd4447a0066 100644 --- a/tests/packagedcode/data/readme/android/basic/README.android.expected +++ b/tests/packagedcode/data/readme/android/basic/README.android.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "BSD", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/libaom@v1.0.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/libaom@v1.0.0" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/chromium/basic/README.chromium.expected b/tests/packagedcode/data/readme/chromium/basic/README.chromium.expected index 568a1ba9022..a88cc316b99 100644 --- a/tests/packagedcode/data/readme/chromium/basic/README.chromium.expected +++ b/tests/packagedcode/data/readme/chromium/basic/README.chromium.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "Apache", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/tsproxy@a2f578febcd79b751d948f615bbde8f6189fbeed%20%28commit%20hash%29", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/tsproxy@a2f578febcd79b751d948f615bbde8f6189fbeed%20%28commit%20hash%29" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/basic/README.facebook.expected b/tests/packagedcode/data/readme/facebook/basic/README.facebook.expected index a78d21ca2e3..99906016d74 100644 --- a/tests/packagedcode/data/readme/facebook/basic/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/basic/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "PSF or ZPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/setuptools@18.5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/setuptools@18.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/capital-filename/README.FACEBOOK.expected b/tests/packagedcode/data/readme/facebook/capital-filename/README.FACEBOOK.expected index a78d21ca2e3..99906016d74 100644 --- a/tests/packagedcode/data/readme/facebook/capital-filename/README.FACEBOOK.expected +++ b/tests/packagedcode/data/readme/facebook/capital-filename/README.FACEBOOK.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "PSF or ZPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/setuptools@18.5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/setuptools@18.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/download-link-as-download_url/README.facebook.expected b/tests/packagedcode/data/readme/facebook/download-link-as-download_url/README.facebook.expected index 897cf85e931..95365badf7f 100644 --- a/tests/packagedcode/data/readme/facebook/download-link-as-download_url/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/download-link-as-download_url/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "apache-2.0", "declared_license": "Apache 2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/downloaded-from-as-download_url/README.facebook.expected b/tests/packagedcode/data/readme/facebook/downloaded-from-as-download_url/README.facebook.expected index 897cf85e931..95365badf7f 100644 --- a/tests/packagedcode/data/readme/facebook/downloaded-from-as-download_url/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/downloaded-from-as-download_url/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "apache-2.0", "declared_license": "Apache 2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/missing-type/README.facebook.expected b/tests/packagedcode/data/readme/facebook/missing-type/README.facebook.expected index 6959046e0fd..df8b5debb27 100644 --- a/tests/packagedcode/data/readme/facebook/missing-type/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/missing-type/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/missing-type", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/missing-type" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/project-as-name/README.facebook.expected b/tests/packagedcode/data/readme/facebook/project-as-name/README.facebook.expected index 019a734dfde..d922e6a8974 100644 --- a/tests/packagedcode/data/readme/facebook/project-as-name/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/project-as-name/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "apache-2.0", "declared_license": "Apache 2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/repo-as-homepage_url/README.facebook.expected b/tests/packagedcode/data/readme/facebook/repo-as-homepage_url/README.facebook.expected index ff3659cbdff..d922e6a8974 100644 --- a/tests/packagedcode/data/readme/facebook/repo-as-homepage_url/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/repo-as-homepage_url/README.facebook.expected @@ -1,35 +1,38 @@ -{ - "type": "readme", - "namespace": null, - "name": "mbed TLS", - "version": "2.16.4", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": "https://github.com/ARMmbed/mbedtls", - "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, - "license_expression": "apache-2.0", - "declared_license": "Apache 2.0", - "notice_text": null, - "root_path": null, - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null -} \ No newline at end of file +[ + { + "type": "readme", + "namespace": null, + "name": "mbed TLS", + "version": "2.16.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://github.com/ARMmbed/mbedtls", + "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, + "license_expression": "apache-2.0", + "declared_license": "Apache 2.0", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/source-as-homepage_url/README.facebook.expected b/tests/packagedcode/data/readme/facebook/source-as-homepage_url/README.facebook.expected index 019a734dfde..d922e6a8974 100644 --- a/tests/packagedcode/data/readme/facebook/source-as-homepage_url/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/source-as-homepage_url/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "apache-2.0", "declared_license": "Apache 2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook.expected b/tests/packagedcode/data/readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook.expected index a78d21ca2e3..99906016d74 100644 --- a/tests/packagedcode/data/readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "PSF or ZPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/setuptools@18.5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/setuptools@18.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/facebook/website-as-homepage_url/README.facebook.expected b/tests/packagedcode/data/readme/facebook/website-as-homepage_url/README.facebook.expected index 019a734dfde..d922e6a8974 100644 --- a/tests/packagedcode/data/readme/facebook/website-as-homepage_url/README.facebook.expected +++ b/tests/packagedcode/data/readme/facebook/website-as-homepage_url/README.facebook.expected @@ -25,13 +25,14 @@ "license_expression": "apache-2.0", "declared_license": "Apache 2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/mbed%20TLS@2.16.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/mbed%20TLS@2.16.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/google/basic/README.google.expected b/tests/packagedcode/data/readme/google/basic/README.google.expected index 02fe3d9f6b9..cb5c3286ef8 100644 --- a/tests/packagedcode/data/readme/google/basic/README.google.expected +++ b/tests/packagedcode/data/readme/google/basic/README.google.expected @@ -25,13 +25,14 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/lunit@0.5", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/lunit@0.5" } ] \ No newline at end of file diff --git a/tests/packagedcode/data/readme/thirdparty/basic/README.thirdparty.expected b/tests/packagedcode/data/readme/thirdparty/basic/README.thirdparty.expected index 9860bf2bf37..4be3125d48a 100644 --- a/tests/packagedcode/data/readme/thirdparty/basic/README.thirdparty.expected +++ b/tests/packagedcode/data/readme/thirdparty/basic/README.thirdparty.expected @@ -25,13 +25,14 @@ "license_expression": "unknown", "declared_license": "BSD", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:readme/colorama@0.2.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "readme", + "purl": "pkg:readme/colorama@0.2.4" } ] \ No newline at end of file diff --git a/tests/packagedcode/test_readme.py b/tests/packagedcode/test_readme.py index e2412c118ca..337cfbaa6f0 100644 --- a/tests/packagedcode/test_readme.py +++ b/tests/packagedcode/test_readme.py @@ -9,8 +9,6 @@ import os.path -import saneyaml - from packagedcode import readme from packages_test_utils import PackageTester from scancode_config import REGEN_TEST_FIXTURES @@ -21,96 +19,96 @@ class TestReadme(PackageTester): def test_is_manifest_readme_facebook(self): test_file = self.get_test_loc('readme/facebook/downloaded-from-as-download_url/README.facebook') - assert readme.ReadmeManifest.is_package_data_file(test_file) + assert readme.ReadmeHandler.is_datafile(test_file) def test_parse_facebook_downloaded_from_as_download_url(self): test_file = self.get_test_loc('readme/facebook/downloaded-from-as-download_url/README.facebook') expected_loc = self.get_test_loc('readme/facebook/downloaded-from-as-download_url/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_download_link_as_download_url(self): test_file = self.get_test_loc('readme/facebook/download-link-as-download_url/README.facebook') expected_loc = self.get_test_loc('readme/facebook/download-link-as-download_url/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_source_as_homepage_url(self): test_file = self.get_test_loc('readme/facebook/repo-as-homepage_url/README.facebook') expected_loc = self.get_test_loc('readme/facebook/repo-as-homepage_url/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) - def test_parse_facebook_source_as_homepage_url(self): + def test_parse_facebook_source_as_homepage_url2(self): test_file = self.get_test_loc('readme/facebook/source-as-homepage_url/README.facebook') expected_loc = self.get_test_loc('readme/facebook/source-as-homepage_url/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_website_as_homepage_url(self): test_file = self.get_test_loc('readme/facebook/website-as-homepage_url/README.facebook') expected_loc = self.get_test_loc('readme/facebook/website-as-homepage_url/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_project_as_name(self): test_file = self.get_test_loc('readme/facebook/project-as-name/README.facebook') expected_loc = self.get_test_loc('readme/facebook/project-as-name/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_missing_type(self): test_file = self.get_test_loc('readme/facebook/missing-type/README.facebook') expected_loc = self.get_test_loc('readme/facebook/missing-type/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_capitalized_filename(self): test_file = self.get_test_loc('readme/facebook/capital-filename/README.FACEBOOK') expected_loc = self.get_test_loc('readme/facebook/capital-filename/README.FACEBOOK.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_use_parent_dir_name_as_package_name_if_no_package_name_detected(self): test_file = self.get_test_loc('readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook') expected_loc = self.get_test_loc('readme/facebook/use-parent-dir-name-as-package-name/setuptools/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_thirdparty_basic(self): test_file = self.get_test_loc('readme/thirdparty/basic/README.thirdparty') expected_loc = self.get_test_loc('readme/thirdparty/basic/README.thirdparty.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_is_manifest_readme_google(self): test_file = self.get_test_loc('readme/google/basic/README.google') - assert readme.ReadmeManifest.is_package_data_file(test_file) + assert readme.ReadmeHandler.is_datafile(test_file) def test_parse_google_basic(self): test_file = self.get_test_loc('readme/google/basic/README.google') expected_loc = self.get_test_loc('readme/google/basic/README.google.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_facebook_basic(self): test_file = self.get_test_loc('readme/facebook/basic/README.facebook') expected_loc = self.get_test_loc('readme/facebook/basic/README.facebook.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_chromium_basic(self): test_file = self.get_test_loc('readme/chromium/basic/README.chromium') expected_loc = self.get_test_loc('readme/chromium/basic/README.chromium.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_parse_android_basic(self): test_file = self.get_test_loc('readme/android/basic/README.android') expected_loc = self.get_test_loc('readme/android/basic/README.android.expected') - package = readme.ReadmeManifest.recognize(test_file) - self.check_packages(package, expected_loc, regen=REGEN_TEST_FIXTURES) + package = readme.ReadmeHandler.parse(test_file) + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_is_manifest_not_readme(self): test_file = self.get_test_loc('readme/invalid/invalid_file') - assert not readme.ReadmeManifest.is_package_data_file(test_file) + assert not readme.ReadmeHandler.is_datafile(test_file) From 0db6803bfcd6033369e10c7f5ee4a53092470331 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:29:18 +0200 Subject: [PATCH 32/36] Add new handler for etc/os-release files * Add new dependency on container-inspector * Also cleanup and sync setup files Signed-off-by: Philippe Ombredanne --- setup-mini.cfg | 12 +++---- setup.cfg | 2 +- src/packagedcode/distro.py | 66 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 src/packagedcode/distro.py diff --git a/setup-mini.cfg b/setup-mini.cfg index 3d0cff1b131..beba15cce64 100644 --- a/setup-mini.cfg +++ b/setup-mini.cfg @@ -69,7 +69,8 @@ install_requires = chardet >= 3.0.0 click >= 6.7, !=7.0 colorama >= 0.3.9 - commoncode >= 30.0.0 + commoncode >= 30.1.1 + container-inspector >= 30.0.0 debian-inspector >= 30.0.0 dparse2 >= 0.6.0 fasteners @@ -175,14 +176,13 @@ scancode_scan = # module for details and doc. scancode_post_scan = summary = summarycode.summarizer:ScanSummary - summary2 = summarycode.summarizer2:ScanSummary - summary-keeping-details = summarycode.summarizer:ScanSummaryWithDetails - summary-key-files = summarycode.summarizer:ScanKeyFilesSummary - summary-by-facet = summarycode.summarizer:ScanByFacetSummary + tallies = summarycode.tallies:Tallies + tallies-with-details = summarycode.tallies:TalliesWithDetails + tallies-key-files = summarycode.tallies:KeyFilesTallies + tallies-by-facet = summarycode.tallies:FacetTallies license-clarity-score = summarycode.score:LicenseClarityScore license-policy = licensedcode.plugin_license_policy:LicensePolicy mark-source = scancode.plugin_mark_source:MarkSource - classify-package = summarycode.classify:PackageTopAndKeyFilesTagger is-license-text = licensedcode.plugin_license_text:IsLicenseText filter-clues = cluecode.plugin_filter_clues:RedundantCluesFilter consolidate = summarycode.plugin_consolidate:Consolidator diff --git a/setup.cfg b/setup.cfg index b5e06c761e0..ec5fe902032 100644 --- a/setup.cfg +++ b/setup.cfg @@ -70,6 +70,7 @@ install_requires = click >= 6.7, !=7.0 colorama >= 0.3.9 commoncode >= 30.1.1 + container-inspector >= 30.0.0 debian-inspector >= 30.0.0 dparse2 >= 0.6.0 fasteners @@ -184,7 +185,6 @@ scancode_post_scan = license-clarity-score = summarycode.score:LicenseClarityScore license-policy = licensedcode.plugin_license_policy:LicensePolicy mark-source = scancode.plugin_mark_source:MarkSource - classify-package = summarycode.classify:PackageTopAndKeyFilesTagger is-license-text = licensedcode.plugin_license_text:IsLicenseText filter-clues = cluecode.plugin_filter_clues:RedundantCluesFilter consolidate = summarycode.plugin_consolidate:Consolidator diff --git a/src/packagedcode/distro.py b/src/packagedcode/distro.py new file mode 100644 index 00000000000..538a2ee1f30 --- /dev/null +++ b/src/packagedcode/distro.py @@ -0,0 +1,66 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + +from container_inspector.distro import Distro + +from packagedcode import models +from packagedcode import utils + +""" +Check for files to determine the Linux distro or operating system of a codebase. +""" + + +class EtcOsReleaseHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'etc_os_release' + default_package_type = 'linux-distro' + path_patterns = ('*etc/os-release', '*usr/lib/os-release',) + description = 'Linux OS release metadata file' + documentation_url = 'https://www.freedesktop.org/software/systemd/man/os-release.html' + + @classmethod + def parse(cls, location): + distro = Distro.from_os_release_file(location) + distro_identifier = distro.identifier + pretty_name = distro.pretty_name and distro.pretty_name.lower() or '' + + if distro_identifier == 'debian': + namespace = 'debian' + + if 'distroless' in pretty_name: + name = 'distroless' + elif pretty_name.startswith('debian'): + name = 'distroless' + + elif distro_identifier == 'ubuntu' and distro.id_like == 'debian': + namespace = 'debian' + name = 'ubuntu' + else: + namespace = distro_identifier + name = 'ubuntu' + + version = distro.version_id + + yield models.PackageData( + datasource_id=cls.datasource_id, + type=cls.default_package_type, + namespace=namespace, + name=name, + version=version, + ) + + @classmethod + def find_linux_rootfs_root_resource(cls, resource, codebase): + """ + Given a ``codebase`` ``resource`` for an "os-release" file, return the + resource for the root directory of this filesystem or None. + """ + paths = ('etc/os-release', 'usr/lib/os-release',) + return utils.find_root_from_paths(paths, resource, codebase) + From 296176ae9c5177f028886004b0bc0feba0a568ba Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:33:02 +0200 Subject: [PATCH 33/36] Improve package handling * Adopt new handler style in plugin * improve utilities * test plugin and package recognition Signed-off-by: Philippe Ombredanne --- src/packagedcode/README.rst | 11 +- src/packagedcode/__init__.py | 410 +- src/packagedcode/misc.py | 293 + src/packagedcode/plugin_package.py | 326 +- src/packagedcode/recognize.py | 74 +- src/packagedcode/utils.py | 61 +- .../instance/pypi-with-test-manifests/tox.ini | 55 - ...manifests-atomicwrites-scanned-result.json | 3 +- ...python-manifests-atomicwrites-scanned.json | 118 +- ...python-manifests-click-scanned-result.json | 3 +- .../python-manifests-click-scanned.json | 20 +- ...instance-expected-with-test-manifests.json | 280 +- ...n-package-instance-expected-with-uuid.json | 291 +- .../python-package-instance-expected.json | 291 +- .../data/models/full-expected.json | 8 +- .../data/models/nested-npm-packages.json | 237 - .../data/models/simple-expected.json | 8 +- .../data/plugin/about-package-expected.json | 172 +- .../data/plugin/bower-package-expected.json | 49 +- .../data/plugin/cargo-package-expected.json | 36 +- .../data/plugin/chef-package-expected.json | 59 +- .../data/plugin/com-package-expected.json | 69 +- .../data/plugin/conda-package-expected.json | 314 +- .../data/plugin/cran-package-expected.json | 33 +- .../data/plugin/freebsd-package-expected.json | 26 +- .../data/plugin/haxe-package-expected.json | 26 +- tests/packagedcode/data/plugin/help.txt | 1228 ++-- .../data/plugin/maven-package-expected.json | 5592 ++++++++++++----- .../data/plugin/mui-package-expected.json | 69 +- .../data/plugin/mum-package-expected.json | 7 +- .../data/plugin/mun-package-expected.json | 69 +- .../data/plugin/npm-package-expected.json | 40 +- .../data/plugin/nuget-package-expected.json | 26 +- .../data/plugin/opam-package-expected.json | 35 +- .../plugin/phpcomposer-package-expected.json | 47 +- .../data/plugin/pubspec-expected.json | 186 +- .../data/plugin/pubspec-lock-expected.json | 406 +- .../data/plugin/python-package-expected.json | 448 +- .../data/plugin/rpm-package-expected.json | 28 +- .../plugin/rubygems-package-expected.json | 122 +- .../data/plugin/sys-package-expected.json | 69 +- .../data/plugin/tlb-package-expected.json | 69 +- .../data/plugin/win_pe-package-expected.json | 69 +- .../data/plugin/winmd-package-expected.json | 69 +- .../pypi/Six/{ => Six.dist-info}/METADATA | 0 tests/packagedcode/test_package_instance.py | 37 +- tests/packagedcode/test_package_models.py | 161 +- ...{test_plugin.py => test_plugin_package.py} | 106 +- tests/packagedcode/test_recognize.py | 72 +- 49 files changed, 7538 insertions(+), 4690 deletions(-) create mode 100644 src/packagedcode/misc.py delete mode 100644 tests/packagedcode/data/instance/pypi-with-test-manifests/tox.ini delete mode 100644 tests/packagedcode/data/models/nested-npm-packages.json rename tests/packagedcode/data/recon/pypi/Six/{ => Six.dist-info}/METADATA (100%) rename tests/packagedcode/{test_plugin.py => test_plugin_package.py} (78%) diff --git a/src/packagedcode/README.rst b/src/packagedcode/README.rst index 8e762fb8abd..6daec5a5043 100644 --- a/src/packagedcode/README.rst +++ b/src/packagedcode/README.rst @@ -31,11 +31,11 @@ Taking Python as a main example a package can exist in multiple forms: file type with metadata such as Windows DLLs. Additional markers may also include "namespaces" such as Java or Python imports, C/C++ namespace declarations. -2. **parse and collect the package manifest(s)** metadata. For Python, this means +2. **parse and collect the package datafile or manifest(s)** metadata. For Python, this means extracting name, version, authorship, declared licensing and declared dependencies as found in the any of the package descriptor files (e.g. a `setup.py` file, `requirements` file(s) or any of the `*-dist-info` or `*-egg-info` dir files such as -a `metadata.json`). Other package formats have their own metatada that may be more or +a `metadata.json`). Other package datafile formats have their own metatada that may be more or less comprehensive in the breadth and depth of information they offer (e.g. `.nuspec`, `package.json`, `bower.json`, Godeps, etc...). These metadata include the declared dependencies (and in some cases the fully resolved dependencies too such as @@ -43,7 +43,12 @@ with Gemfile.lock). Finally, all the different packages formats and data are normalized and stored in a common data structure abstracting the small differences of naming and semantics that may exists between all the different package formats. -Once collected, these data are then injected in the `packages` section of the scan. +Once collected, these data are then injected in the `package_data` section of a file scan +for each recognized package datafile. + +3. **assemble multiple package datafile** as top level packages. + + What code in `packagedcode` is not meant to do: diff --git a/src/packagedcode/__init__.py b/src/packagedcode/__init__.py index 3eace113a70..562c9d6f2c2 100644 --- a/src/packagedcode/__init__.py +++ b/src/packagedcode/__init__.py @@ -10,21 +10,25 @@ import attr from packagedcode import about +from packagedcode import alpine from packagedcode import bower from packagedcode import build from packagedcode import build_gradle from packagedcode import cargo from packagedcode import chef from packagedcode import debian +from packagedcode import debian_copyright +from packagedcode import distro from packagedcode import conda from packagedcode import cocoapods from packagedcode import cran from packagedcode import freebsd +from packagedcode import godeps from packagedcode import golang from packagedcode import haxe from packagedcode import jar_manifest from packagedcode import maven -from packagedcode import models +from packagedcode import misc from packagedcode import msi from packagedcode import npm from packagedcode import nuget @@ -37,250 +41,194 @@ from packagedcode import rubygems from packagedcode import win_pe from packagedcode import windows +from packagedcode import win_reg +# Note: the order matters: from the most to the least specific parser. +# a handler classes MUST be added to this list to be active +PACKAGE_DATAFILE_HANDLERS = [ + about.AboutFileHandler, -# Note: the order matters: from the most to the least specific -# Package classes MUST be added to this list to be active -PACKAGE_DATA_CLASSES = [ - rpm.RpmManifest, - debian.DebianPackage, - - models.JavaJar, - jar_manifest.JavaManifest, - models.JavaEar, - models.JavaWar, - maven.PomXml, - jar_manifest.IvyJar, - models.JBossSar, - models.Axis2Mar, - - about.Aboutfile, - npm.PackageJson, - npm.PackageLockJson, - npm.YarnLockJson, - phpcomposer.ComposerJson, - phpcomposer.ComposerLock, - haxe.HaxelibJson, - cargo.CargoToml, - cargo.CargoLock, - cocoapods.Podspec, - cocoapods.PodfileLock, - cocoapods.PodspecJson, - opam.OpamFile, - models.MeteorPackage, - bower.BowerJson, - freebsd.CompactManifest, - models.CpanModule, - rubygems.GemArchive, - rubygems.GemArchiveExtracted, - rubygems.GemSpec, - rubygems.GemfileLock, - models.AndroidApp, - models.AndroidLibrary, - models.MozillaExtension, - models.ChromeExtension, - models.IOSApp, - pypi.MetadataFile, - pypi.BinaryDistArchive, - pypi.SourceDistArchive, - pypi.SetupPy, - pypi.DependencyFile, - pypi.PipfileLock, - pypi.RequirementsFile, - golang.GoMod, - golang.GoSum, - models.CabPackage, - models.InstallShieldPackage, - models.NSISInstallerPackage, - nuget.Nuspec, - models.SharPackage, - models.AppleDmgPackage, - models.IsoImagePackage, - models.SquashfsPackage, - chef.MetadataJson, - chef.Metadatarb, - build.BazelPackage, - build.BuckPackage, - build.AutotoolsPackage, - conda.Condayml, - win_pe.WindowsExecutable, - readme.ReadmeManifest, - build.MetadataBzl, - msi.MsiInstallerPackage, - windows.MicrosoftUpdateManifest, - pubspec.PubspecYaml, - pubspec.PubspecLock, - cran.DescriptionFile, - build_gradle.BuildGradle -] + alpine.AlpineApkArchiveHandler, + alpine.AlpineApkbuildHandler, + alpine.AlpineInstalledDatabaseHandler, + bower.BowerJsonHandler, -PACKAGE_INSTANCE_CLASSES = [ - rpm.RpmPackage, - maven.MavenPackage, - npm.NpmPackage, - phpcomposer.PhpPackage, - haxe.HaxePackage, - cargo.RustPackage, - cocoapods.CocoapodsPackage, - opam.OpamPackage, - bower.BowerPackage, - freebsd.FreebsdPackage, - rubygems.RubyPackage, - pypi.PythonPackage, - golang.GoPackage, - nuget.NugetPackage, - chef.ChefPackage, - win_pe.WindowsPackage, - pubspec.PubspecPackage, - cran.CranPackage -] + build_gradle.BuildGradleHandler, + build.AutotoolsConfigureHandler, + build.BazelBuildHandler, + build.BuckMetadataBzlHandler, + build.BuckPackageHandler, -PACKAGE_DATA_BY_TYPE = { - cls.default_type: cls - for cls in PACKAGE_DATA_CLASSES -} + cargo.CargoLockHandler, + cargo.CargoTomlHandler, + chef.ChefMetadataJsonHandler, + chef.ChefMetadataRbHandler, -PACKAGE_INSTANCES_BY_TYPE = { - cls.default_type: cls - for cls in PACKAGE_INSTANCE_CLASSES -} + cocoapods.PodspecHandler, + cocoapods.PodspecJsonHandler, + cocoapods.PodfileLockHandler, + cocoapods.PodfileHandler, + conda.CondaYamlHandler, + conda.CondaMetaYamlHandler, -def get_package_class(scan_data, default=models.Package): - """ - Return the Package subclass that corresponds to the package type in a - mapping of package `scan_data`. - - For example: - >>> data = {'type': 'cpan'} - >>> assert models.CpanModule == get_package_class(data) - >>> data = {'type': 'some stuff'} - >>> assert models.Package == get_package_class(data) - >>> data = {'type': None} - >>> assert models.Package == get_package_class(data) - >>> data = {} - >>> assert models.Package == get_package_class(data) - >>> data = [] - >>> assert models.Package == get_package_class(data) - >>> data = None - >>> assert models.Package == get_package_class(data) - """ - ptype = scan_data and scan_data.get('type') or None - if not ptype: - # basic type for default package types - return default - ptype_class = PACKAGE_DATA_BY_TYPE.get(ptype) - return ptype_class or default + cran.CranDescriptionFileHandler, + debian_copyright.DebianCopyrightFileInPackageHandler, + debian_copyright.DebianCopyrightFileInSourceHandler, + # TODO: consider activating? debian_copyright.StandaloneDebianCopyrightFileHandler, -def get_package_instance(scan_data): - """ - Return a Package instance re-built from a mapping of ``scan_data`` native - Python data that has the structure of a scan. Known attributes that store a - list of objects are also "rehydrated" (such as models.Party). + debian.DebianDscFileHandler, + debian.DebianDistrolessInstalledDatabaseHandler, + debian.DebianInstalledFilelistHandler, + debian.DebianInstalledMd5sumFilelistHandler, + debian.DebianInstalledStatusDatabaseHandler, - The Package instance will use the Package subclass that supports the - provided package "type" when possible or the base Package class otherwise. + debian.DebianControlFileInExtractedDebHandler, + debian.DebianControlFileInSourceHandler, - Unknown attributes provided in ``scan_data`` that do not exist as fields in - the Package class are kept as items in the Package.extra_data mapping. - An Exception is raised if an "unknown attribute" name already exists as - a Package.extra_data key. - """ - # TODO: consider using a proper library for this such as cattrs, - # marshmallow, etc. or use the field type that we declare. - - # Each of these are lists of class instances tracked here, which are stored - # as a list of mappings in scanc_data - list_field_types_by_name = { - 'parties': models.Party, - 'dependencies': models.DependentPackage, - 'installed_files': models.PackageFile, - } - - # these are computed attributes serialized on a package - # that should not be recreated when serializing - computed_attributes = set([ - 'purl', - 'repository_homepage_url', - 'repository_download_url', - 'api_data_url' - ]) - - # re-hydrate lists of typed objects - klas = get_package_class(scan_data) - existing_fields = attr.fields_dict(klas) - - extra_data = scan_data.get('extra_data', {}) or {} - package_data = {} - - for key, value in scan_data.items(): - if not value or key in computed_attributes: - continue - - field = existing_fields.get(key) - - if not field: - if key not in extra_data: - # keep unknown field as extra data - extra_data[key] = value - continue - else: - raise Exception( - f'Invalid scan_data with duplicated key: {key}={value!r} ' - f'present both as attribute AND as extra_data: ' - f'{key}={extra_data[key]!r}' - ) - - list_field_type = list_field_types_by_name.get(key) - if not list_field_type: - # this is a plain known field - package_data[key] = value - continue - - # Since we have a list_field_type, value must be a list of mappings: - # we transform it in a list of objects. - - if not isinstance(value, list): - raise Exception( - f'Invalid scan_data with unknown data structure. ' - f'Expected the value to be a list of dicts and not a ' - f'{type(value)!r} for {key}={value!r}' - ) - - objects = list(_build_objects_list(values=value, klass=list_field_type)) - package_data[key] = objects - - return klas(**package_data) - - -def _build_objects_list(values, klass): + debian.DebianDebPackageHandler, + debian.DebianMd5sumFilelistInPackageHandler, + + debian.DebianSourcePackageMetadataTarballHandler, + debian.DebianSourcePackageTarballHandler, + + distro.EtcOsReleaseHandler, + + freebsd.CompactManifestHandler, + + godeps.GodepsHandler, + golang.GoModHandler, + golang.GoSumHandler, + + haxe.HaxelibJsonHandler, + + jar_manifest.JavaJarManifestHandler, + + maven.MavenPomXmlHandler, + maven.MavenPomPropertiesHandler, + + misc.AndroidAppArchiveHandler, + misc.AndroidLibraryHandler, + misc.AppleDmgHandler, + misc.Axis2MarArchiveHandler , + misc.Axis2MarModuleXmlHandler , + misc.CabArchiveHandler, + misc.ChromeExtensionHandler, + misc.CpanDistIniHandler , + misc.CpanMakefilePlHandler, + misc.CpanManifestHandler, + misc.CpanMetaJsonHandler, + misc.CpanMetaYmlHandler, + misc.InstallShieldPackageHandler, + misc.IosAppIpaHandler, + misc.IsoImageHandler, + misc.IvyXmlHandler, + + misc.JavaEarAppXmlHandler , + misc.JavaEarHandler , + + # is this redundant with Jar manifest? + misc.JavaJarHandler, + + misc.JavaWarHandler, + misc.JavaWarWebXmlHandler, + + misc.JBossSarHandler , + misc.JBossServiceXmlHandler , + + misc.MeteorPackageHandler, + misc.MozillaExtensionHandler, + misc.NsisInstallerHandler, + misc.SharArchiveHandler, + misc.SquashfsImageHandler, + + msi.MsiInstallerHandler, + + npm.NpmPackageJsonHandler, + npm.NpmPackageLockJsonHandler, + npm.NpmShrinkwrapJsonHandler, + npm.YarnLockV1Handler, + npm.YarnLockV2Handler, + + nuget.NugetNupkgHandler, + nuget.NugetNuspecHandler, + + opam.OpamFileHandler, + + phpcomposer.PhpComposerJsonHandler, + phpcomposer.PhpComposerLockHandler, + + pubspec.DartPubspecYamlHandler, + pubspec.DartPubspecLockHandler, + + pypi.PipfileHandler, + pypi.PipfileLockHandler, + pypi.PipRequirementsFileHandler, + pypi.PypiEggHandler, + pypi.PypiSdistArchiveHandler, + pypi.PypiWheelHandler, + pypi.PyprojectTomlHandler, + pypi.PythonEditableInstallationPkgInfoFile, + pypi.PythonEggPkgInfoFile, + pypi.PythonInstalledWheelMetadataFile, + pypi.PythonSdistPkgInfoFile, + pypi.PythonSetupPyHandler, + pypi.SetupCfgHandler, + + readme.ReadmeHandler, + + rpm.RpmArchiveHandler, + rpm.RpmInstalledBdbDatabaseHandler, + rpm.RpmInstalledSqliteDatabaseHandler, + rpm.RpmInstalledNdbDatabaseHandler, + rpm.RpmSpecfileHandler, + + rubygems.GemMetadataArchiveExtractedHandler, + rubygems.GemArchiveHandler, + + # the order of these handlers matter + rubygems.GemfileInExtractedGemHandler, + rubygems.GemfileHandler, + + # the order of these handlers matter + rubygems.GemfileLockInExtractedGemHandler, + rubygems.GemfileLockHandler, + + # the order of these handlers matter + rubygems.GemspecInInstalledVendorBundleSpecificationsHandler, + rubygems.GemspecInExtractedGemHandler, + rubygems.GemspecHandler, + + windows.MicrosoftUpdateManifestHandler, + + win_pe.WindowsExecutableHandler, + + win_reg.InstalledProgramFromDockerSoftwareDeltaHandler, + win_reg.InstalledProgramFromDockerFilesSoftwareHandler, + win_reg.InstalledProgramFromDockerUtilityvmSoftwareHandler, +] + +HANDLER_BY_DATASOURCE_ID = { + handler.datasource_id: handler for handler in PACKAGE_DATAFILE_HANDLERS +} + + +class UnknownPackageDatasource(Exception): + pass + + +def get_package_handler(package_data): """ - Yield ``klass`` objects built from a ``values`` list of mappings. + Return the DatafileHandler class that corresponds to a ``package_data`` + PackageData object. Raise a UnknownPackageDatasource error if the + DatafileHandler is not found. """ - # Since we have a list_field_type, value must be a list of mappings: - # we transform it in a list of objects. - - if not isinstance(values, list): - raise Exception( - f'Invalid scan_data with unknown data structure. ' - f'Expected the value to be a list of dicts and not a ' - f'{type(values)!r} for {values!r}' - ) - - for val in values: - if not val: - continue - - if not isinstance(val, dict): - raise Exception( - f'Invalid scan_data with unknown data structure. ' - f'Expected the value to be a mapping for and not a ' - f'{type(val)!r} for {values!r}' - ) - - yield klass.create(**val) + ppc = HANDLER_BY_DATASOURCE_ID.get(package_data.datasource_id) + if not ppc: + raise UnknownPackageDatasource(package_data) + return ppc diff --git a/src/packagedcode/misc.py b/src/packagedcode/misc.py new file mode 100644 index 00000000000..a3ba060258d --- /dev/null +++ b/src/packagedcode/misc.py @@ -0,0 +1,293 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + +from packagedcode import models + +""" +Various package data file formats to implment. +""" + +# Package types +# NOTE: this is somewhat redundant with extractcode archive handlers +# yet the purpose and semantics are rather different here + +# TODO: parse me!!! +# TODO: add missing URLs and descriptions + + +class JavaJarHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'java_jar' + # NOTE: there are a few rare cases where a .zip can be a JAR. + path_patterns = ('*.jar',) + filetypes = ('zip archive', 'java archive',) + description = 'JAR Java Archive' + documentation_url = 'https://en.wikipedia.org/wiki/JAR_(file_format)' + + +class IvyXmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'ant_ivy_xml' + path_patterns = ('*/ivy.xml',) + default_package_type = 'ivy' + default_primary_language = 'Java' + description = 'Ant IVY dependency file' + documentation_url = 'https://ant.apache.org/ivy/history/latest-milestone/ivyfile.html' + + +class JavaWarHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'java_war_archive' + path_patterns = ('*.war',) + filetypes = ('zip archive',) + default_package_type = 'war' + default_primary_language = 'Java' + description = 'Java Web Application Archive' + documentation_url = 'https://en.wikipedia.org/wiki/WAR_(file_format)' + + +class JavaWarWebXmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'java_war_web_xml' + path_patterns = ('*/WEB-INF/web.xml',) + filetypes = ('zip archive',) + default_package_type = 'war' + default_primary_language = 'Java' + description = 'Java WAR web/xml' + documentation_url = 'https://en.wikipedia.org/wiki/WAR_(file_format)' + + +class JavaEarHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'java_ear_archive' + default_package_type = 'ear' + default_primary_language = 'Java' + path_patterns = ('*.ear',) + filetypes = ('zip archive',) + description = 'Java EAR Enterprise application archive' + documentation_url = 'https://en.wikipedia.org/wiki/EAR_(file_format)' + + +class JavaEarAppXmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'java_ear_application_xml' + default_package_type = 'ear' + default_primary_language = 'Java' + path_patterns = ('*/META-INF/application.xml',) + description = 'Java EAR application.xml' + documentation_url = 'https://en.wikipedia.org/wiki/EAR_(file_format)' + + +class Axis2MarModuleXmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'axis2_module_xml' + path_patterns = ('*/meta-inf/module.xml',) + default_package_type = 'axis2' + default_primary_language = 'Java' + description = 'Apache Axis2 module.xml' + documentation_url = 'https://axis.apache.org/axis2/java/core/docs/modules.html' + + +class Axis2MarArchiveHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'axis2_mar' + path_patterns = ('*.mar',) + filetypes = ('zip archive',) + default_package_type = 'axis2' + default_primary_language = 'Java' + description = 'Apache Axis2 module archive' + documentation_url = 'https://axis.apache.org/axis2/java/core/docs/modules.html' + + +class JBossSarHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'jboss_sar' + path_patterns = ('*.sar',) + filetypes = ('zip archive',) + default_package_type = 'jboss-service' + default_primary_language = 'Java' + description = 'JBOSS service archive' + documentation_url = 'https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch02s01.html' + + +class JBossServiceXmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'jboss_service_xml' + path_patterns = ('*/meta-inf/jboss-service.xml',) + default_package_type = 'jboss-service' + default_primary_language = 'Java' + description = 'JBOSS service.xml' + documentation_url = 'https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch02s01.html' + + +class MeteorPackageHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'meteor_package' + path_patterns = ('*/package.js',) + default_package_type = 'meteor' + default_primary_language = 'JavaScript' + description = 'Meteor package.js' + documentation_url = 'https://docs.meteor.com/api/packagejs.html' + + +class CpanManifestHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'cpan_manifest' + path_patterns = ('*/MANIFEST',) + default_package_type = 'cpan' + default_primary_language = 'Perl' + description = 'CPAN Perl module MANIFEST' + documentation_url = 'https://metacpan.org/pod/Module::Manifest' + + +class CpanMakefilePlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'cpan_makefile' + path_patterns = ('*/Makefile.PL',) + default_package_type = 'cpan' + default_primary_language = 'Perl' + description = 'CPAN Perl Makefile.PL' + documentation_url = 'https://www.perlmonks.org/?node_id=128077' + +# http://blogs.perl.org/users/neilb/2017/04/an-introduction-to-distribution-metadata.html +# Version 2+ data is what you’ll find in META.json +# Version 1.4 data is what you’ll find in META.yml + + +class CpanMetaYmlHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'cpan_meta_yml' + path_patterns = ('*/META.yml',) + default_package_type = 'cpan' + default_primary_language = 'Perl' + description = 'CPAN Perl META.yml' + documentation_url = 'https://metacpan.org/pod/CPAN::Meta::YAML' + + +class CpanMetaJsonHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'cpan_meta_json' + path_patterns = ('*/META.json',) + default_package_type = 'cpan' + default_primary_language = 'Perl' + description = 'CPAN Perl META.json' + documentation_url = 'https://metacpan.org/pod/Parse::CPAN::Meta' + + +class CpanDistIniHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'cpan_dist_ini' + path_patterns = ('*/dist.ini',) + default_package_type = 'cpan' + default_primary_language = 'Perl' + description = 'CPAN Perl dist.ini' + documentation_url = 'https://metacpan.org/pod/Dist::Zilla::Tutorial' + + +class AndroidAppArchiveHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'android_apk' + default_package_type = 'android' + default_primary_language = 'Java' + path_patterns = ('*.apk',) + filetypes = ('zip archive',) + description = 'Android application package' + documentation_url = 'https://en.wikipedia.org/wiki/Apk_(file_format)' + + +# see http://tools.android.com/tech-docs/new-build-system/aar-formats +class AndroidLibraryHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'android_aar_library' + default_package_type = 'android_lib' + default_primary_language = 'Java' + + # note: Apache Axis also uses AAR path_patterns for plain Jars. + # this could be decided based on internal structure + path_patterns = ('*.aar',) + filetypes = ('zip archive',) + + description = 'Android library archive' + documentation_url = 'https://developer.android.com/studio/projects/android-library' + + +class MozillaExtensionHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'mozilla_xpi' + path_patterns = ('*.xpi',) + filetypes = ('zip archive',) + default_package_type = 'mozilla' + default_primary_language = 'JavaScript' + description = 'Mozilla XPI extension' + documentation_url = 'https://en.wikipedia.org/wiki/XPInstall' + + +class ChromeExtensionHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'chrome_crx' + path_patterns = ('*.crx',) + filetypes = ('zip archive',) + default_package_type = 'chrome' + default_primary_language = 'JavaScript' + description = 'Chrome extension' + documentation_url = 'https://chrome.google.com/extensions' + + +class IosAppIpaHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'ios_ipa' + default_package_type = 'ios' + default_primary_language = 'Objective-C' + path_patterns = ('*.ipa',) + filetypes = ('microsoft cabinet',) + description = 'iOS package archive' + documentation_url = 'https://en.wikipedia.org/wiki/.ipa' + + +class CabArchiveHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'microsoft_cabinet' + default_package_type = 'cab' + default_primary_language = 'C' + path_patterns = ('*.cab',) + filetypes = ('microsoft cabinet',) + description = 'Microsoft cabinet archive' + documentation_url = 'https://docs.microsoft.com/en-us/windows/win32/msi/cabinet-files' + + +class InstallShieldPackageHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'installshield_installer' + default_package_type = 'installshield' + path_patterns = ('*.exe',) + filetypes = ('zip installshield',) + description = 'InstallShield installer' + documentation_url = 'https://www.revenera.com/install/products/installshield' + + +class NsisInstallerHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'nsis_installer' + default_package_type = 'nsis' + path_patterns = ('*.exe',) + filetypes = ('nullsoft installer',) + description = 'NSIS installer' + documentation_url = 'https://nsis.sourceforge.io/Main_Page' + + +class SharArchiveHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'shar_shell_archive' + default_package_type = 'shar' + path_patterns = ('*.shar',) + filetypes = ('posix shell script',) + description = 'shell archive' + documentation_url = 'https://en.wikipedia.org/wiki/Shar' + + +class AppleDmgHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'apple_dmg' + default_package_type = 'dmg' + path_patterns = ('*.dmg', '*.sparseimage',) + description = '' + documentation_url = '' + + +class IsoImageHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'iso_disk_image' + default_package_type = 'iso' + path_patterns = ('*.iso', '*.udf', '*.img',) + filetypes = ('iso 9660 cd-rom', 'high sierra cd-rom',) + description = 'ISO disk image' + documentation_url = 'https://en.wikipedia.org/wiki/ISO_9660' + + +class SquashfsImageHandler(models.NonAssemblableDatafileHandler): + datasource_id = 'squashfs_disk_image' + default_package_type = 'squashfs' + filetypes = ('squashfs',) + description = 'Squashfs disk image' + documentation_url = 'https://en.wikipedia.org/wiki/SquashFS' + +# TODO: Add VM images formats(VMDK, OVA, OVF, VDI, etc) and Docker/other containers diff --git a/src/packagedcode/plugin_package.py b/src/packagedcode/plugin_package.py index ebca715c6f4..9a819320b33 100644 --- a/src/packagedcode/plugin_package.py +++ b/src/packagedcode/plugin_package.py @@ -7,65 +7,64 @@ # See https://aboutcode.org for more information about nexB OSS projects. # - import attr import click import os -import sys -import uuid +import logging -from plugincode.scan import ScanPlugin -from plugincode.scan import scan_impl from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import DOC_GROUP from commoncode.cliutils import SCAN_GROUP +from commoncode.resource import Resource +from plugincode.scan import scan_impl +from plugincode.scan import ScanPlugin -from packageurl import PackageURL -from packagedcode import get_package_instance -from packagedcode import PACKAGE_DATA_CLASSES -from packagedcode import PACKAGE_INSTANCES_BY_TYPE +from packagedcode import get_package_handler from packagedcode.models import Dependency - +from packagedcode.models import Package +from packagedcode.models import PackageData TRACE = os.environ.get('SCANCODE_DEBUG_PACKAGE', False) -if TRACE: - use_print = True +def logger_debug(*args): + pass - if use_print: - printer = print - else: - import logging - logger = logging.getLogger(__name__) - # logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - printer = logger.debug +logger = logging.getLogger(__name__) + +if TRACE: + import sys + + logging.basicConfig(stream=sys.stdout) + logger.setLevel(logging.DEBUG) def logger_debug(*args): - return printer(' '.join(isinstance(a, str) and a or repr(a) - for a in args)) + return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) + def print_packages(ctx, param, value): + """ + Print the list of supported package manifests and datafile formats + """ if not value or ctx.resilient_parsing: return - for package_cls in sorted(PACKAGE_DATA_CLASSES, key=lambda pc: (pc.default_type)): + + from packagedcode import PACKAGE_DATAFILE_HANDLERS + + for cls in sorted( + PACKAGE_DATAFILE_HANDLERS, key=lambda pc: (pc.default_package_type or '', pc.datasource_id) + ): + pp = ', '.join(repr(p) for p in cls.path_patterns) click.echo('--------------------------------------------') - click.echo('Package: {self.default_type}'.format(self=package_cls)) - click.echo( - ' class: {self.__module__}:{self.__name__}'.format(self=package_cls)) - if package_cls.file_patterns: - click.echo(' file_patterns: ', nl=False) - click.echo(', '.join(package_cls.file_patterns)) - if package_cls.extensions: - click.echo(' extensions: ', nl=False) - click.echo(', '.join(package_cls.extensions)) - if package_cls.filetypes: - click.echo(' filetypes: ', nl=False) - click.echo(', '.join(package_cls.filetypes)) - click.echo('') + click.echo(f'Package type: {cls.default_package_type}') + if cls.datasource_id is None: + raise Exception(cls) + click.echo(f' datasource_id: {cls.datasource_id}') + click.echo(f' documentation URL: {cls.documentation_url}') + click.echo(f' primary language: {cls.default_primary_language}') + click.echo(f' description: {cls.description}') + click.echo(f' path_patterns: {pp}') ctx.exit() @@ -73,34 +72,47 @@ def print_packages(ctx, param, value): class PackageScanner(ScanPlugin): """ Scan a Resource for Package data and report these as "package_data" at the - right file or directory level. Then create package instances with these and - other package information and files, and report these as "packages" at the - top level (codebase level). + file level. Then create "packages" from these "package_data" at the top + level. """ - resource_attributes = {} - codebase_attributes = {} - codebase_attributes['dependencies'] = attr.ib(default=attr.Factory(list), repr=False) - codebase_attributes['packages'] = attr.ib(default=attr.Factory(list), repr=False) - resource_attributes['package_data'] = attr.ib(default=attr.Factory(list), repr=False) - resource_attributes['for_packages'] = attr.ib(default=attr.Factory(list), repr=False) - sort_order = 6 + codebase_attributes = dict( + # a list of dependencies + dependencies=attr.ib(default=attr.Factory(list), repr=False), + # a list of packages + packages=attr.ib(default=attr.Factory(list), repr=False), + ) + resource_attributes = dict( + # a list of package data + package_data=attr.ib(default=attr.Factory(list), repr=False), + # a list of purls with UUID that a file belongs to + for_packages=attr.ib(default=attr.Factory(list), repr=False), + ) + + required_plugins = ['scan:licenses'] - required_plugins = ['scan:licenses', ] + sort_order = 6 options = [ - PluggableCommandLineOption(('-p', '--package',), - is_flag=True, default=False, - help='Scan for package data and build scripts.', + PluggableCommandLineOption( + ( + '-p', + '--package', + ), + is_flag=True, + default=False, + help='Scan for package and dependency manifests, lockfiles and related data.', help_group=SCAN_GROUP, - sort_order=20), - + sort_order=20, + ), PluggableCommandLineOption( ('--list-packages',), - is_flag=True, is_eager=True, + is_flag=True, + is_eager=True, callback=print_packages, - help='Show the list of supported package types and exit.', - help_group=DOC_GROUP), + help='Show the list of supported package manifest parsers and exit.', + help_group=DOC_GROUP, + ), ] def is_enabled(self, package, **kwargs): @@ -108,175 +120,85 @@ def is_enabled(self, package, **kwargs): def get_scanner(self, **kwargs): """ - Return a scanner callable to scan a Resource for packages. + Return a scanner callable to scan a file for package data. """ from scancode.api import get_package_data + return get_package_data def process_codebase(self, codebase, **kwargs): """ - Populate top level `packages` with package instances. + Populate the ``codebase`` top level ``packages`` and ``dependencies`` + with package and dependency instances, assembling parsed package data + from one or more datafiles as needed. """ - create_package_and_dep_instances(codebase, **kwargs) + create_package_and_deps(codebase, **kwargs) -def create_package_and_dep_instances(codebase, **kwargs): +def create_package_and_deps(codebase, **kwargs): """ - Create package instances from package data present in the codebase. + Create and save top-level Package and Dependency from the parsed + package data present in the codebase. """ - package_data_files = [] - package_instance_by_id = {} - - dependency_data_paths = [] - dependency_instance_by_id = {} + # track resource ids that have been already processed + seen_resource_ids = set() + dependencies_top_level = [] + packages_top_level = [] for resource in codebase.walk(topdown=False): if not resource.package_data: continue - # continue if this resource is already in a package_instance - if resource.path in package_data_files: + if resource.rid in seen_resource_ids: continue if TRACE: - logger_debug( - 'create_package_and_dep_instances:', - 'location:', resource.location, + logger_debug('create_package_and_deps: location:', resource.location) + + for package_data in resource.package_data: + try: + package_data = PackageData.from_dict(package_data) + except Exception as e: + raise Exception( + 'create_package_and_deps: Failed to create PackageData:', + package_data, + ) from e + + if TRACE: + logger_debug(' create_package_and_deps: package_data:', package_data) + + # Find a handler for this package datasource to assemble collect + # packages and deps + handler = get_package_handler(package_data) + if TRACE: + logger_debug(' create_package_and_deps: handler:', handler) + click.echo(f' create_package_and_deps: handler: {handler}') + items = handler.assemble( + package_data=package_data, + resource=resource, + codebase=codebase, ) - # Currently we assume there is only one PackageData - # ToDo: Do this for multiple PackageDatas per resource - package_data = resource.package_data[0] - - # Check if the package data has all the mandatory attributes to create a pURL - if not package_data.get("name"): + for item in items: + if TRACE: + logger_debug(' create_package_and_deps: item:', item) - # Check if package_data is from lockfile - if package_data.get("dependencies"): - dependency_data_paths.append(resource.path) - for dependency_instance in create_dependency_instances( - resource.path, - package_data.get("dependencies") - ): - dependency_instance_by_id[dependency_instance.dependency_uuid] = dependency_instance + if isinstance(item, Package): + packages_top_level.append(item) - continue - - # Check if Package is implemented for this package type - pk_instance_class = PACKAGE_INSTANCES_BY_TYPE.get(package_data["type"]) - if not pk_instance_class: - continue + elif isinstance(item, Dependency): + dependencies_top_level.append(item) - # create a Package object of the package type which this manifest belongs to - pk_instance = pk_instance_class() - pk_instance_uuid = uuid.uuid4() - package_instance_by_id[pk_instance_uuid] = pk_instance + elif isinstance(item, Resource): + seen_resource_ids.add(item.rid) + if TRACE: + logger_debug( + ' create_package_and_deps: seen_resource_ids:', + seen_resource_ids, + ) - # use `get_other_package_data` to get other package_data files of this instance - package_data_by_path = pk_instance.get_other_package_data(resource, codebase) - package_data_by_path[resource.path] = package_data - - # populate Package with data from it's package_data files - pk_instance.populate_package_data(package_data_by_path, uuid=pk_instance_uuid) - - if TRACE: - logger_debug( - 'create_package_and_dep_instances:', - 'package_data_by_path:', package_data_by_path, - ) - - # add `path` into `package_data_files` for all package_datas - for path, package_data in package_data_by_path.items(): - package_data_files.append(path) - - if package_data.get("dependencies"): - if path in dependency_data_paths: - set_package_uuid_for_dependencies( - dependency_instance_by_id, - path, - pk_instance.package_uuid, - ) - continue - - dependency_data_paths.append(path) - for dep_instance in create_dependency_instances( - path, - package_data.get("dependencies") - ): - dependency_instance_by_id[dep_instance.dependency_uuid] = dep_instance - dep_instance.for_package = pk_instance.package_uuid - - # get files for this Package - pk_instance.files = tuple(pk_instance.get_package_files(resource, codebase)) - - # add `package_uuid` to `for_packages` for all files of that package - update_files_with_package_uuid(pk_instance.files, codebase, pk_instance.package_uuid) - - if TRACE: - logger_debug( - 'create_package_and_dep_instances:', - 'pk_instance:', pk_instance, - ) - - if TRACE: - logger_debug( - 'create_package_and_dep_instances:', - 'package_data_files:', package_data_files, - ) - - # Get unique Package objects from `package_instance_by_id` - for package_instance in list(package_instance_by_id.values()): - codebase.attributes.packages.append(package_instance.to_dict()) - - # Get unique Dependency objects from `dependency_instance_by_id` - for dependency_instance in list(dependency_instance_by_id.values()): - codebase.attributes.dependencies.append(dependency_instance.to_dict()) - - -def update_files_with_package_uuid(file_paths, codebase, package_uuid): - """ - For the corresponding resources to a list of `file_paths` for a Package, - set their `for_packages` with the `package_uuid`. - """ - for file_path in file_paths: - resource = codebase.get_resource_from_path(file_path) - resource.for_packages.append(package_uuid) - resource.save(codebase) - - -def set_package_uuid_for_dependencies(dependency_instance_by_id, path, pk_instance_uuid): - """ - For all dependency instances in `dependency_instance_by_id` which were collected from a - specific `path` update their `for_package` attribute to `pk_instance_uuid`. - """ - for dep_instance in dependency_instance_by_id.values(): - if path is dep_instance.lockfile: - dep_instance.for_package = pk_instance_uuid - - -def create_dependency_instances(path, dependencies): - """ - Return a list of Dependency obejcts corresponding to - each dependency in the `package_data` level `dependencies` list. - """ - dependency_instances = [] - - for dependency in dependencies: - purl = PackageURL.from_string(dependency['purl']) - purl.qualifiers["uuid"] = str(uuid.uuid4()) - - dependency_instances.append( - Dependency( - dependency_uuid=purl.to_string(), - lockfile=path, - purl=dependency['purl'], - extracted_requirement=dependency['extracted_requirement'], - scope=dependency['scope'], - is_runtime=dependency['is_runtime'], - is_optional=dependency['is_optional'], - is_resolved=dependency['is_resolved'], - resolved_package=dependency['resolved_package'] - ) - ) + else: + raise Exception(f'Unknown package assembly item type: {item!r}') - return dependency_instances + codebase.attributes.packages.extend(pkg.to_dict() for pkg in packages_top_level) + codebase.attributes.dependencies.extend(dep.to_dict() for dep in dependencies_top_level) diff --git a/src/packagedcode/recognize.py b/src/packagedcode/recognize.py index 477a8983d94..5bff92ee7bc 100644 --- a/src/packagedcode/recognize.py +++ b/src/packagedcode/recognize.py @@ -7,12 +7,12 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -import fnmatch import os import sys from commoncode import filetype -from packagedcode import PACKAGE_DATA_CLASSES +from packagedcode import PACKAGE_DATAFILE_HANDLERS +from packagedcode import models SCANCODE_DEBUG_PACKAGE_API = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False) @@ -36,64 +36,52 @@ def logger_debug(*args): logger_debug = print """ -Recognize package data in files. +Recognize and parse package datafiles, manifests, or lockfiles. """ def recognize_package_data(location): """ - Return a list of Package objects if any package_data were recognized for this - `location`, or None if there were no Packages found. Raises Exceptions on errors. + Return a list of Package objects if any package_data were recognized for + this `location`, or None if there were no Packages found. Raises Exceptions + on errors. """ if not filetype.is_file(location): - return + return [] - recognized_package_data = [] - for package_data_type in PACKAGE_DATA_CLASSES: - if not package_data_type.is_package_data_file(location): + return list(_parse(location)) + + +def _parse(location): + """ + Yield parsed PackageData objects from ``location``. Raises Exceptions on errors. + """ + + for handler in PACKAGE_DATAFILE_HANDLERS: + if not handler.is_datafile(location): continue + if TRACE: + logger_debug(f'_parse:.is_datafile: {location}') + try: - for recognized in package_data_type.recognize(location): + for parsed in handler.parse(location): if TRACE: - logger_debug( - 'recognize_package_data: metafile matching: recognized:', - recognized, - ) - if recognized and not recognized.license_expression: - # compute and set a normalized license expression - try: - recognized.license_expression = recognized.compute_normalized_license() - except Exception: - if SCANCODE_DEBUG_PACKAGE_API: - raise - recognized.license_expression = 'unknown' - - if TRACE: - logger_debug( - 'recognize_package_data: recognized.license_expression:', - recognized.license_expression - ) - recognized_package_data.append(recognized) - return recognized_package_data + logger_debug(f' _parse: parsed: {parsed!r}') + yield parsed except NotImplementedError: - # build a plain package if recognize is not yet implemented - recognized = package_data_type() + # build a plain package if parse is not yet implemented + pkg = models.PackageData( + datasource_id=handler.datasource_id, + type=handler.default_package_type, + primary_language=handler.default_primary_language, + ) if TRACE: - logger_debug( - 'recognize_package_data: NotImplementedError: recognized', recognized - ) + logger_debug('_parse: NotImplementedError: parsed', parsed) - recognized_package_data.append(recognized) + yield pkg if SCANCODE_DEBUG_PACKAGE_API: raise - - if TRACE: - logger_debug( - 'recognize_package_data: no match for type:', package_data_type - ) - - return recognized_package_data diff --git a/src/packagedcode/utils.py b/src/packagedcode/utils.py index e7349ee3b7d..f163a71a8f6 100644 --- a/src/packagedcode/utils.py +++ b/src/packagedcode/utils.py @@ -103,15 +103,11 @@ def normalize_vcs_url(repo_url, vcs_tool=None): if len(repo_url.split('/')) == 2: # implicit github, but that's only on NPM? - return 'https://github.com/%(repo_url)s' % locals() + return f'https://github.com/{repo_url}' return repo_url -# for legacy compat -parse_repo_url = normalize_vcs_url - - def build_description(summary, description): """ Return a description string from a summary and description @@ -129,9 +125,9 @@ def build_description(summary, description): def combine_expressions( - expressions, - relation='AND', - unique=True, + expressions, + relation='AND', + unique=True, licensing=Licensing(), ): """ @@ -139,3 +135,52 @@ def combine_expressions( license ``expressions`` strings or LicenseExpression objects. """ return expressions and str(le_combine_expressions(expressions, relation, unique, licensing)) or None + + + +def get_ancestor(levels_up, resource, codebase): + """ + Return the nth-``levels_up`` ancestor Resource of ``resource`` in ``codebase`` + or None. + + For example, with levels_up=2 and starting with a resource path of + `gem-extract/metadata.gz-extract/metadata.gz-extract`, gem-extract/ should be + returned. + """ + rounds = 0 + while rounds < levels_up: + resource = resource.parent(codebase) + if not resource: + return + rounds += 1 + return resource + + +def find_root_from_paths(paths, resource, codebase): + """ + Return the resource for the root directory of this filesystem or None, given + a ``resource`` in ``codebase`` with a list of possible resource root- + relative ``paths`` (e.g. extending from the root directory we are looking + for). + """ + for path in paths: + if not resource.path.endswith(path): + continue + return find_root_resource(path=path, resource=resource, codebase=codebase) + + +def find_root_resource(path, resource, codebase): + """ + Return the resource for the root directory of this filesystem or None, given + a ``resource`` in ``codebase`` with a possible resource root-relative + ``path`` (e.g. extending from the root directory we are looking for). + """ + if not resource.path.endswith(path): + return + for _seg in path.split('/'): + resource = resource.parent(codebase) + if not resource: + return + return resource + + diff --git a/tests/packagedcode/data/instance/pypi-with-test-manifests/tox.ini b/tests/packagedcode/data/instance/pypi-with-test-manifests/tox.ini deleted file mode 100644 index 8a48a1cdb3b..00000000000 --- a/tests/packagedcode/data/instance/pypi-with-test-manifests/tox.ini +++ /dev/null @@ -1,55 +0,0 @@ -[tox] -envlist = python -minversion = 3.2 -# https://github.com/jaraco/skeleton/issues/6 -tox_pip_extensions_ext_venv_update = true -toxworkdir={env:TOX_WORK_DIR:.tox} - -[testenv] -deps = - # workaround for sphinx-doc/sphinx#9562 - # TODO: remove after Sphinx>4.1.2 is available. - sphinx@git+https://github.com/sphinx-doc/sphinx; python_version>="3.10" -commands = - pytest {posargs} -usedevelop = True -extras = testing -passenv = - windir # required for test_pkg_resources - -[testenv:docs] -extras = - docs - testing -changedir = docs -commands = - python -m sphinx -W --keep-going . {toxinidir}/build/html - -[testenv:finalize] -skip_install = True -deps = - towncrier - bump2version -passenv = * -commands = - python tools/finalize.py - -[testenv:release] -skip_install = True -deps = - build - twine>=3 - jaraco.develop>=7.1 -passenv = - TWINE_PASSWORD - GITHUB_TOKEN -setenv = - TWINE_USERNAME = {env:TWINE_USERNAME:__token__} -commands = - python -m bootstrap - python -c "import shutil; shutil.rmtree('dist', ignore_errors=True)" - # unset tag_build and tag_date pypa/setuptools#2500 - python setup.py egg_info -Db "" saveopts - python -m build - python -m twine upload dist/* - python -m jaraco.develop.create-github-release diff --git a/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned-result.json b/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned-result.json index 60d85ed81f5..a291a5b7584 100644 --- a/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned-result.json +++ b/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned-result.json @@ -45,10 +45,9 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": null, + "package_uid": null, "package_data_files": [], "files": [], "purl": "pkg:pypi/atomicwrites@1.2.1", diff --git a/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned.json b/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned.json index 9dd87feb27c..d09fcf1c7e2 100644 --- a/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned.json +++ b/tests/packagedcode/data/instance/python-manifests-atomicwrites-scanned.json @@ -1,4 +1,60 @@ [ + { + "type": "pypi", + "namespace": null, + "name": "atomicwrites", + "version": "1.2.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "===================\npython-atomicwrites\n===================\n\n.. image:: https://travis-ci.org/untitaker/python-atomicwrites.svg?branch=master\n :target: https://travis-ci.org/untitaker/python-atomicwrites\n\n.. image:: https://ci.appveyor.com/api/projects/status/vadc4le3c27to59x/branch/master?svg=true\n :target: https://ci.appveyor.com/project/untitaker/python-atomicwrites/branch/master\n\nAtomic file writes.\n\n.. code-block:: python\n\n from atomicwrites import atomic_write\n\n with atomic_write('foo.txt', overwrite=True) as f:\n f.write('Hello world.')\n # \"foo.txt\" doesn't exist yet.\n\n # Now it does.\n\n\nFeatures that distinguish it from other similar libraries (see `Alternatives and Credit`_):\n\n- Race-free assertion that the target file doesn't yet exist. This can be\n controlled with the ``overwrite`` parameter.\n\n- Windows support, although not well-tested. The MSDN resources are not very\n explicit about which operations are atomic. I'm basing my assumptions off `a\n comment\n `_\n by `Doug Crook\n `_, who appears\n to be a Microsoft employee:\n\n FAQ: Is MoveFileEx atomic\n Frequently asked question: Is MoveFileEx atomic if the existing and new\n files are both on the same drive?\n\n The simple answer is \"usually, but in some cases it will silently fall-back\n to a non-atomic method, so don't count on it\".\n\n The implementation of MoveFileEx looks something like this: [...]\n\n The problem is if the rename fails, you might end up with a CopyFile, which\n is definitely not atomic.\n\n If you really need atomic-or-nothing, you can try calling\n NtSetInformationFile, which is unsupported but is much more likely to be\n atomic. \n\n- Simple high-level API that wraps a very flexible class-based API.\n\n- Consistent error handling across platforms.\n\n\nHow it works\n============\n\nIt uses a temporary file in the same directory as the given path. This ensures\nthat the temporary file resides on the same filesystem.\n\nThe temporary file will then be atomically moved to the target location: On\nPOSIX, it will use ``rename`` if files should be overwritten, otherwise a\ncombination of ``link`` and ``unlink``. On Windows, it uses MoveFileEx_ through\nstdlib's ``ctypes`` with the appropriate flags.\n\nNote that with ``link`` and ``unlink``, there's a timewindow where the file\nmight be available under two entries in the filesystem: The name of the\ntemporary file, and the name of the target file.\n\nAlso note that the permissions of the target file may change this way. In some\nsituations a ``chmod`` can be issued without any concurrency problems, but\nsince that is not always the case, this library doesn't do it by itself.\n\n.. _MoveFileEx: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365240%28v=vs.85%29.aspx\n\nfsync\n-----\n\nOn POSIX, ``fsync`` is invoked on the temporary file after it is written (to\nflush file content and metadata), and on the parent directory after the file is\nmoved (to flush filename).\n\n``fsync`` does not take care of disks' internal buffers, but there don't seem\nto be any standard POSIX APIs for that. On OS X, ``fcntl`` is used with\n``F_FULLFSYNC`` instead of ``fsync`` for that reason.\n\nOn Windows, `_commit `_\nis used, but there are no guarantees about disk internal buffers.\n\nAlternatives and Credit\n=======================\n\nAtomicwrites is directly inspired by the following libraries (and shares a\nminimal amount of code):\n\n- The Trac project's `utility functions\n `_,\n also used in `Werkzeug `_ and\n `mitsuhiko/python-atomicfile\n `_. The idea to use\n ``ctypes`` instead of ``PyWin32`` originated there.\n\n- `abarnert/fatomic `_. Windows support\n (based on ``PyWin32``) was originally taken from there.\n\nOther alternatives to atomicwrites include:\n\n- `sashka/atomicfile `_. Originally I\n considered using that, but at the time it was lacking a lot of features I\n needed (Windows support, overwrite-parameter, overriding behavior through\n subclassing).\n\n- The `Boltons library collection `_\n features a class for atomic file writes, which seems to have a very similar\n ``overwrite`` parameter. It is lacking Windows support though.\n\nLicense\n=======\n\nLicensed under the MIT, see ``LICENSE``.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Markus Unterwaditzer", + "email": "markus@unterwaditzer.net", + "url": null + } + ], + "keywords": [ + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: Implementation :: CPython" + ], + "homepage_url": "https://github.com/untitaker/python-atomicwrites", + "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, + "license_expression": "mit", + "declared_license": { + "license": "MIT", + "classifiers": [ + "License :: OSI Approved :: MIT License" + ] + }, + "notice_text": null, + "dependencies": [], + "source_packages": [], + "extra_data": {}, + "purl": "pkg:pypi/atomicwrites@1.2.1", + "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", + "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json", + "datasource_id": null + }, { "type": "pypi", "namespace": null, @@ -25,7 +81,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "atomicwrites/Pipfile.lock", "dependencies": [ { "purl": "pkg:pypi/atomicwrites@1.1.5", @@ -164,70 +219,13 @@ "is_resolved": true } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null - }, - { - "type": "pypi", - "namespace": null, - "name": "atomicwrites", - "version": "1.2.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "Python", - "description": "===================\npython-atomicwrites\n===================\n\n.. image:: https://travis-ci.org/untitaker/python-atomicwrites.svg?branch=master\n :target: https://travis-ci.org/untitaker/python-atomicwrites\n\n.. image:: https://ci.appveyor.com/api/projects/status/vadc4le3c27to59x/branch/master?svg=true\n :target: https://ci.appveyor.com/project/untitaker/python-atomicwrites/branch/master\n\nAtomic file writes.\n\n.. code-block:: python\n\n from atomicwrites import atomic_write\n\n with atomic_write('foo.txt', overwrite=True) as f:\n f.write('Hello world.')\n # \"foo.txt\" doesn't exist yet.\n\n # Now it does.\n\n\nFeatures that distinguish it from other similar libraries (see `Alternatives and Credit`_):\n\n- Race-free assertion that the target file doesn't yet exist. This can be\n controlled with the ``overwrite`` parameter.\n\n- Windows support, although not well-tested. The MSDN resources are not very\n explicit about which operations are atomic. I'm basing my assumptions off `a\n comment\n `_\n by `Doug Crook\n `_, who appears\n to be a Microsoft employee:\n\n FAQ: Is MoveFileEx atomic\n Frequently asked question: Is MoveFileEx atomic if the existing and new\n files are both on the same drive?\n\n The simple answer is \"usually, but in some cases it will silently fall-back\n to a non-atomic method, so don't count on it\".\n\n The implementation of MoveFileEx looks something like this: [...]\n\n The problem is if the rename fails, you might end up with a CopyFile, which\n is definitely not atomic.\n\n If you really need atomic-or-nothing, you can try calling\n NtSetInformationFile, which is unsupported but is much more likely to be\n atomic. \n\n- Simple high-level API that wraps a very flexible class-based API.\n\n- Consistent error handling across platforms.\n\n\nHow it works\n============\n\nIt uses a temporary file in the same directory as the given path. This ensures\nthat the temporary file resides on the same filesystem.\n\nThe temporary file will then be atomically moved to the target location: On\nPOSIX, it will use ``rename`` if files should be overwritten, otherwise a\ncombination of ``link`` and ``unlink``. On Windows, it uses MoveFileEx_ through\nstdlib's ``ctypes`` with the appropriate flags.\n\nNote that with ``link`` and ``unlink``, there's a timewindow where the file\nmight be available under two entries in the filesystem: The name of the\ntemporary file, and the name of the target file.\n\nAlso note that the permissions of the target file may change this way. In some\nsituations a ``chmod`` can be issued without any concurrency problems, but\nsince that is not always the case, this library doesn't do it by itself.\n\n.. _MoveFileEx: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365240%28v=vs.85%29.aspx\n\nfsync\n-----\n\nOn POSIX, ``fsync`` is invoked on the temporary file after it is written (to\nflush file content and metadata), and on the parent directory after the file is\nmoved (to flush filename).\n\n``fsync`` does not take care of disks' internal buffers, but there don't seem\nto be any standard POSIX APIs for that. On OS X, ``fcntl`` is used with\n``F_FULLFSYNC`` instead of ``fsync`` for that reason.\n\nOn Windows, `_commit `_\nis used, but there are no guarantees about disk internal buffers.\n\nAlternatives and Credit\n=======================\n\nAtomicwrites is directly inspired by the following libraries (and shares a\nminimal amount of code):\n\n- The Trac project's `utility functions\n `_,\n also used in `Werkzeug `_ and\n `mitsuhiko/python-atomicfile\n `_. The idea to use\n ``ctypes`` instead of ``PyWin32`` originated there.\n\n- `abarnert/fatomic `_. Windows support\n (based on ``PyWin32``) was originally taken from there.\n\nOther alternatives to atomicwrites include:\n\n- `sashka/atomicfile `_. Originally I\n considered using that, but at the time it was lacking a lot of features I\n needed (Windows support, overwrite-parameter, overriding behavior through\n subclassing).\n\n- The `Boltons library collection `_\n features a class for atomic file writes, which seems to have a very similar\n ``overwrite`` parameter. It is lacking Windows support though.\n\nLicense\n=======\n\nLicensed under the MIT, see ``LICENSE``.", - "release_date": null, - "parties": [ - { - "type": "person", - "role": "author", - "name": "Markus Unterwaditzer", - "email": "markus@unterwaditzer.net", - "url": null - } - ], - "keywords": [ - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: Implementation :: CPython" - ], - "homepage_url": "https://github.com/untitaker/python-atomicwrites", - "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, - "license_expression": "mit", - "declared_license": { - "license": "MIT", - "classifiers": [ - "License :: OSI Approved :: MIT License" - ] - }, - "notice_text": null, - "root_path": "atomicwrites/atomicwrites-1.2.1-py2.py3-none-any.whl", - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "purl": "pkg:pypi/atomicwrites@1.2.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json" + "api_data_url": null, + "datasource_id": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/instance/python-manifests-click-scanned-result.json b/tests/packagedcode/data/instance/python-manifests-click-scanned-result.json index f0b6e16a24c..7c133e2c554 100644 --- a/tests/packagedcode/data/instance/python-manifests-click-scanned-result.json +++ b/tests/packagedcode/data/instance/python-manifests-click-scanned-result.json @@ -49,10 +49,9 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": null, + "package_uid": null, "package_data_files": [], "files": [], "purl": "pkg:pypi/click@8.0.1", diff --git a/tests/packagedcode/data/instance/python-manifests-click-scanned.json b/tests/packagedcode/data/instance/python-manifests-click-scanned.json index e51a546f650..b59cc6f8e6e 100644 --- a/tests/packagedcode/data/instance/python-manifests-click-scanned.json +++ b/tests/packagedcode/data/instance/python-manifests-click-scanned.json @@ -50,7 +50,6 @@ ] }, "notice_text": null, - "root_path": "METADATA", "dependencies": [ { "purl": "pkg:pypi/colorama", @@ -69,13 +68,13 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": "pkg:pypi/click@8.0.1", "repository_homepage_url": "https://pypi.org/project/https://pypi.org", "repository_download_url": "https://pypi.org/packages/source/c/click/click-8.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/click/8.0.1/json" + "api_data_url": "https://pypi.org/pypi/click/8.0.1/json", + "datasource_id": null }, { "type": "pypi", @@ -103,15 +102,14 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "setup.cfg", "dependencies": [], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": null }, { "type": "pypi", @@ -139,7 +137,6 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "root_path": "setup.py", "dependencies": [ { "purl": "pkg:pypi/colorama", @@ -158,13 +155,13 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": "pkg:pypi/click", "repository_homepage_url": "https://pypi.org/project/https://pypi.org", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/json" + "api_data_url": "https://pypi.org/pypi/click/json", + "datasource_id": null }, { "type": "pypi", @@ -192,7 +189,6 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "tox.ini", "dependencies": [ { "purl": "pkg:pypi/pre-commit", @@ -203,12 +199,12 @@ "is_resolved": false } ], - "contains_source_code": null, "source_packages": [], "extra_data": {}, "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": null } ] \ No newline at end of file diff --git a/tests/packagedcode/data/instance/python-package-instance-expected-with-test-manifests.json b/tests/packagedcode/data/instance/python-package-instance-expected-with-test-manifests.json index 8cb87a4b256..fcb7b17b733 100644 --- a/tests/packagedcode/data/instance/python-package-instance-expected-with-test-manifests.json +++ b/tests/packagedcode/data/instance/python-package-instance-expected-with-test-manifests.json @@ -16,72 +16,11 @@ "warnings": [], "extra_data": { "spdx_license_list_version": "3.16", - "files_count": 9 + "files_count": 8 } } ], - "dependencies": [ - { - "purl": "pkg:pypi/towncrier", - "extracted_requirement": "towncrier", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/towncrier", - "for_package": "pkg:pypi/setuptools@58.2.0", - "lockfile": "tox.ini" - }, - { - "purl": "pkg:pypi/bump2version", - "extracted_requirement": "bump2version", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/bump2version", - "for_package": "pkg:pypi/setuptools@58.2.0", - "lockfile": "tox.ini" - }, - { - "purl": "pkg:pypi/build", - "extracted_requirement": "build", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/build", - "for_package": "pkg:pypi/setuptools@58.2.0", - "lockfile": "tox.ini" - }, - { - "purl": "pkg:pypi/twine", - "extracted_requirement": ">=3", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/twine", - "for_package": "pkg:pypi/setuptools@58.2.0", - "lockfile": "tox.ini" - }, - { - "purl": "pkg:pypi/jaraco.develop", - "extracted_requirement": ">=7.1", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/jaraco.develop", - "for_package": "pkg:pypi/setuptools@58.2.0", - "lockfile": "tox.ini" - } - ], + "dependencies": [], "packages": [ { "type": "pypi", @@ -131,30 +70,21 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:pypi/setuptools@58.2.0", - "package_data_files": [ - "PKG-INFO", - "setup.py", - "tox.ini" + "extra_data": { + "Documentation": "Documentation, https://setuptools.readthedocs.io/" + }, + "repository_homepage_url": "https://pypi.org/project/setuptools", + "repository_download_url": "https://pypi.org/packages/source/s/setuptools/setuptools-58.2.0.tar.gz", + "api_data_url": "https://pypi.org/pypi/setuptools/58.2.0/json", + "package_uid": "pkg:pypi/setuptools@58.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "PKG-INFO" ], - "files": [ - "LICENSE", - "MANIFEST.in", - "PKG-INFO", - "pyproject.toml", - "README.rst", - "setup.cfg", - "setup.py", - "tox.ini", - "pkg_resources/tests/data/my-test-package-zip/my-test-package.zip" + "datasource_ids": [ + "pypi_sdist_pkginfo" ], - "purl": "pkg:pypi/setuptools@58.2.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/s/setuptools/setuptools-58.2.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/setuptools/58.2.0/json" + "purl": "pkg:pypi/setuptools@58.2.0" }, { "type": "pypi", @@ -182,20 +112,19 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/my-test-package@1.0", - "package_data_files": [ + "repository_homepage_url": "https://pypi.org/project/my-test-package", + "repository_download_url": "https://pypi.org/packages/source/m/my-test-package/my-test-package-1.0.tar.gz", + "api_data_url": "https://pypi.org/pypi/my-test-package/1.0/json", + "package_uid": "pkg:pypi/my-test-package@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "pkg_resources/tests/data/my-test-package-zip/my-test-package.zip" ], - "files": [ - "pkg_resources/tests/data/my-test-package-zip/my-test-package.zip" + "datasource_ids": [ + "pypi_sdist" ], - "purl": "pkg:pypi/my-test-package@1.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/m/my-test-package/my-test-package-1.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/my-test-package/1.0/json" + "purl": "pkg:pypi/my-test-package@1.0" } ], "files": [ @@ -203,18 +132,14 @@ "path": "LICENSE", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/setuptools@58.2.0" - ], + "for_packages": [], "scan_errors": [] }, { "path": "MANIFEST.in", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/setuptools@58.2.0" - ], + "for_packages": [], "scan_errors": [] }, { @@ -269,18 +194,21 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": {}, + "file_references": [], + "extra_data": { + "Documentation": "Documentation, https://setuptools.readthedocs.io/" + }, "dependencies": [], - "purl": "pkg:pypi/setuptools@58.2.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/setuptools", "repository_download_url": "https://pypi.org/packages/source/s/setuptools/setuptools-58.2.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/setuptools/58.2.0/json" + "api_data_url": "https://pypi.org/pypi/setuptools/58.2.0/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/setuptools@58.2.0" } ], "for_packages": [ - "pkg:pypi/setuptools@58.2.0" + "pkg:pypi/setuptools@58.2.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -288,9 +216,7 @@ "path": "README.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/setuptools@58.2.0" - ], + "for_packages": [], "scan_errors": [] }, { @@ -351,43 +277,69 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/my-test-package@1.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/my-test-package", "repository_download_url": "https://pypi.org/packages/source/m/my-test-package/my-test-package-1.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/my-test-package/1.0/json" + "api_data_url": "https://pypi.org/pypi/my-test-package/1.0/json", + "datasource_id": "pypi_sdist", + "purl": "pkg:pypi/my-test-package@1.0" } ], "for_packages": [ - "pkg:pypi/setuptools@58.2.0", - "pkg:pypi/my-test-package@1.0" + "pkg:pypi/my-test-package@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, { "path": "pyproject.toml", "type": "file", - "package_data": [], - "for_packages": [ - "pkg:pypi/setuptools@58.2.0" + "package_data": [ + { + "type": "pypi", + "namespace": null, + "name": null, + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "pypi_pyproject_toml", + "purl": null + } ], + "for_packages": [], "scan_errors": [] }, { "path": "setup.cfg", "type": "file", - "package_data": [], - "for_packages": [ - "pkg:pypi/setuptools@58.2.0" - ], - "scan_errors": [] - }, - { - "path": "setup.py", - "type": "file", "package_data": [ { "type": "pypi", @@ -397,7 +349,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "", + "description": null, "release_date": null, "parties": [], "keywords": [], @@ -413,25 +365,26 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": {}, + "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_cfg", + "purl": null } ], "for_packages": [ - "pkg:pypi/setuptools@58.2.0" + "pkg:pypi/setuptools@58.2.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, { - "path": "tox.ini", + "path": "setup.py", "type": "file", "package_data": [ { @@ -442,7 +395,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": null, + "description": "", "release_date": null, "parties": [], "keywords": [], @@ -458,66 +411,21 @@ "vcs_url": null, "copyright": null, "license_expression": null, - "declared_license": null, + "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:pypi/towncrier", - "extracted_requirement": "towncrier", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/bump2version", - "extracted_requirement": "bump2version", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/build", - "extracted_requirement": "build", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/twine", - "extracted_requirement": ">=3", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/jaraco.develop", - "extracted_requirement": ">=7.1", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": null, + "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_py", + "purl": null } ], "for_packages": [ - "pkg:pypi/setuptools@58.2.0" + "pkg:pypi/setuptools@58.2.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/instance/python-package-instance-expected-with-uuid.json b/tests/packagedcode/data/instance/python-package-instance-expected-with-uuid.json index 420c3be953e..5baa956f451 100644 --- a/tests/packagedcode/data/instance/python-package-instance-expected-with-uuid.json +++ b/tests/packagedcode/data/instance/python-package-instance-expected-with-uuid.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/colorama?uuid=732998ac-1c28-448e-be0c-bbbbea2b2f9e", - "for_package": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "lockfile": "METADATA" + "dependency_uid": "pkg:pypi/colorama?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "setup.py", + "datasource_id": "pypi_setup_py" }, { "purl": "pkg:pypi/importlib-metadata", @@ -41,45 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/importlib-metadata?uuid=757cc640-7c92-4c4b-9ae7-1b63615c26d4", - "for_package": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "lockfile": "METADATA" - }, - { - "purl": "pkg:pypi/colorama", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/colorama?uuid=52178881-3370-4169-9b15-cda8dd71984f", - "for_package": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "lockfile": "setup.py" - }, - { - "purl": "pkg:pypi/importlib-metadata", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/importlib-metadata?uuid=428f8422-742b-4031-adf9-26ab295281cf", - "for_package": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "lockfile": "setup.py" - }, - { - "purl": "pkg:pypi/pre-commit", - "extracted_requirement": "pre-commit", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pre-commit?uuid=93498734-5b50-4aa2-a3e3-f40cc5e03b57", - "for_package": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "lockfile": "tox.ini" + "dependency_uid": "pkg:pypi/importlib-metadata?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "setup.py", + "datasource_id": "pypi_setup_py" } ], "packages": [ @@ -87,76 +53,41 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.0.1", + "version": null, "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Composable command line interface toolkit\n\\$ click\\_\n==========\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\nInstalling\n----------\n\nInstall and update using `pip`_:\n\n.. code-block:: text\n\n $ pip install -U click\n\n.. _pip: https://pip.pypa.io/en/stable/quickstart/\n\n\nA Simple Example\n----------------\n\n.. code-block:: python\n\n import click\n\n @click.command()\n @click.option(\"--count\", default=1, help=\"Number of greetings.\")\n @click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\n def hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\n if __name__ == '__main__':\n hello()\n\n.. code-block:: text\n\n $ python hello.py --count=3\n Your name: Click\n Hello, Click!\n Hello, Click!\n Hello, Click!\n\n\nDonate\n------\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, `please\ndonate today`_.\n\n.. _please donate today: https://palletsprojects.com/donate\n\n\nLinks\n-----\n\n- Documentation: https://click.palletsprojects.com/\n- Changes: https://click.palletsprojects.com/changes/\n- PyPI Releases: https://pypi.org/project/click/\n- Source Code: https://github.com/pallets/click\n- Issue Tracker: https://github.com/pallets/click/issues\n- Website: https://palletsprojects.com/p/click\n- Twitter: https://twitter.com/PalletsTeam\n- Chat: https://discord.gg/pallets", + "description": null, "release_date": null, - "parties": [ - { - "type": "person", - "role": "author", - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "url": null - }, - { - "type": "person", - "role": "maintainer", - "name": "Pallets", - "email": "contact@palletsprojects.com", - "url": null - } - ], - "keywords": [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - "Programming Language :: Python" - ], - "homepage_url": "https://palletsprojects.com/p/click/", + "parties": [], + "keywords": [], + "homepage_url": null, "download_url": null, "size": null, "sha1": null, "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": "Issue Tracker, https://github.com/pallets/click/issues/", - "code_view_url": "Source Code, https://github.com/pallets/click/", + "bug_tracking_url": null, + "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new", - "declared_license": { - "license": "BSD-3-Clause", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": null, + "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c", - "package_data_files": [ - "METADATA", - "setup.cfg", - "setup.py", - "tox.ini" + "repository_homepage_url": "https://pypi.org/project/click", + "repository_download_url": null, + "api_data_url": "https://pypi.org/pypi/click/json", + "package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "setup.py" ], - "files": [ - "LICENSE.rst", - "MANIFEST.in", - "METADATA", - "README.rst", - "setup.cfg", - "setup.py", - "tox.ini" + "datasource_ids": [ + "pypi_setup_py" ], - "purl": "pkg:pypi/click@8.0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/c/click/click-8.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/click/8.0.1/json" + "purl": "pkg:pypi/click" } ], "files": [ @@ -164,116 +95,28 @@ "path": "LICENSE.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" - ], + "for_packages": [], "scan_errors": [] }, { "path": "MANIFEST.in", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" - ], + "for_packages": [], "scan_errors": [] }, { "path": "METADATA", "type": "file", - "package_data": [ - { - "type": "pypi", - "namespace": null, - "name": "click", - "version": "8.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "Python", - "description": "Composable command line interface toolkit\n\\$ click\\_\n==========\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\nInstalling\n----------\n\nInstall and update using `pip`_:\n\n.. code-block:: text\n\n $ pip install -U click\n\n.. _pip: https://pip.pypa.io/en/stable/quickstart/\n\n\nA Simple Example\n----------------\n\n.. code-block:: python\n\n import click\n\n @click.command()\n @click.option(\"--count\", default=1, help=\"Number of greetings.\")\n @click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\n def hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\n if __name__ == '__main__':\n hello()\n\n.. code-block:: text\n\n $ python hello.py --count=3\n Your name: Click\n Hello, Click!\n Hello, Click!\n Hello, Click!\n\n\nDonate\n------\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, `please\ndonate today`_.\n\n.. _please donate today: https://palletsprojects.com/donate\n\n\nLinks\n-----\n\n- Documentation: https://click.palletsprojects.com/\n- Changes: https://click.palletsprojects.com/changes/\n- PyPI Releases: https://pypi.org/project/click/\n- Source Code: https://github.com/pallets/click\n- Issue Tracker: https://github.com/pallets/click/issues\n- Website: https://palletsprojects.com/p/click\n- Twitter: https://twitter.com/PalletsTeam\n- Chat: https://discord.gg/pallets", - "release_date": null, - "parties": [ - { - "type": "person", - "role": "author", - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "url": null - }, - { - "type": "person", - "role": "maintainer", - "name": "Pallets", - "email": "contact@palletsprojects.com", - "url": null - } - ], - "keywords": [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - "Programming Language :: Python" - ], - "homepage_url": "https://palletsprojects.com/p/click/", - "download_url": null, - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "Issue Tracker, https://github.com/pallets/click/issues/", - "code_view_url": "Source Code, https://github.com/pallets/click/", - "vcs_url": null, - "copyright": null, - "license_expression": "bsd-new", - "declared_license": { - "license": "BSD-3-Clause", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:pypi/colorama", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/importlib-metadata", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": "pkg:pypi/click@8.0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/c/click/click-8.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/click/8.0.1/json" - } - ], - "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" - ], + "package_data": [], + "for_packages": [], "scan_errors": [] }, { "path": "README.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" - ], + "for_packages": [], "scan_errors": [] }, { @@ -306,18 +149,19 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_cfg", + "purl": null } ], "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" + "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -351,8 +195,8 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -374,70 +218,23 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/click", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/click", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/json" + "api_data_url": "https://pypi.org/pypi/click/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/click" } ], "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" + "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, { "path": "tox.ini", "type": "file", - "package_data": [ - { - "type": "pypi", - "namespace": null, - "name": null, - "version": null, - "qualifiers": {}, - "subpath": null, - "primary_language": "Python", - "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, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:pypi/pre-commit", - "extracted_requirement": "pre-commit", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], - "for_packages": [ - "pkg:pypi/click@8.0.1?uuid=21bf14d1-a101-4324-a0d7-9c79bbdb872c" - ], + "package_data": [], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/instance/python-package-instance-expected.json b/tests/packagedcode/data/instance/python-package-instance-expected.json index 21282300ed9..5baa956f451 100644 --- a/tests/packagedcode/data/instance/python-package-instance-expected.json +++ b/tests/packagedcode/data/instance/python-package-instance-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/colorama", - "for_package": "pkg:pypi/click@8.0.1", - "lockfile": "METADATA" + "dependency_uid": "pkg:pypi/colorama?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "setup.py", + "datasource_id": "pypi_setup_py" }, { "purl": "pkg:pypi/importlib-metadata", @@ -41,45 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/importlib-metadata", - "for_package": "pkg:pypi/click@8.0.1", - "lockfile": "METADATA" - }, - { - "purl": "pkg:pypi/colorama", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/colorama", - "for_package": "pkg:pypi/click@8.0.1", - "lockfile": "setup.py" - }, - { - "purl": "pkg:pypi/importlib-metadata", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/importlib-metadata", - "for_package": "pkg:pypi/click@8.0.1", - "lockfile": "setup.py" - }, - { - "purl": "pkg:pypi/pre-commit", - "extracted_requirement": "pre-commit", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pre-commit", - "for_package": "pkg:pypi/click@8.0.1", - "lockfile": "tox.ini" + "dependency_uid": "pkg:pypi/importlib-metadata?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "setup.py", + "datasource_id": "pypi_setup_py" } ], "packages": [ @@ -87,76 +53,41 @@ "type": "pypi", "namespace": null, "name": "click", - "version": "8.0.1", + "version": null, "qualifiers": {}, "subpath": null, "primary_language": "Python", - "description": "Composable command line interface toolkit\n\\$ click\\_\n==========\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\nInstalling\n----------\n\nInstall and update using `pip`_:\n\n.. code-block:: text\n\n $ pip install -U click\n\n.. _pip: https://pip.pypa.io/en/stable/quickstart/\n\n\nA Simple Example\n----------------\n\n.. code-block:: python\n\n import click\n\n @click.command()\n @click.option(\"--count\", default=1, help=\"Number of greetings.\")\n @click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\n def hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\n if __name__ == '__main__':\n hello()\n\n.. code-block:: text\n\n $ python hello.py --count=3\n Your name: Click\n Hello, Click!\n Hello, Click!\n Hello, Click!\n\n\nDonate\n------\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, `please\ndonate today`_.\n\n.. _please donate today: https://palletsprojects.com/donate\n\n\nLinks\n-----\n\n- Documentation: https://click.palletsprojects.com/\n- Changes: https://click.palletsprojects.com/changes/\n- PyPI Releases: https://pypi.org/project/click/\n- Source Code: https://github.com/pallets/click\n- Issue Tracker: https://github.com/pallets/click/issues\n- Website: https://palletsprojects.com/p/click\n- Twitter: https://twitter.com/PalletsTeam\n- Chat: https://discord.gg/pallets", + "description": null, "release_date": null, - "parties": [ - { - "type": "person", - "role": "author", - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "url": null - }, - { - "type": "person", - "role": "maintainer", - "name": "Pallets", - "email": "contact@palletsprojects.com", - "url": null - } - ], - "keywords": [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - "Programming Language :: Python" - ], - "homepage_url": "https://palletsprojects.com/p/click/", + "parties": [], + "keywords": [], + "homepage_url": null, "download_url": null, "size": null, "sha1": null, "md5": null, "sha256": null, "sha512": null, - "bug_tracking_url": "Issue Tracker, https://github.com/pallets/click/issues/", - "code_view_url": "Source Code, https://github.com/pallets/click/", + "bug_tracking_url": null, + "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new", - "declared_license": { - "license": "BSD-3-Clause", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "license_expression": null, + "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/click@8.0.1", - "package_data_files": [ - "METADATA", - "setup.cfg", - "setup.py", - "tox.ini" + "repository_homepage_url": "https://pypi.org/project/click", + "repository_download_url": null, + "api_data_url": "https://pypi.org/pypi/click/json", + "package_uid": "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "setup.py" ], - "files": [ - "LICENSE.rst", - "MANIFEST.in", - "METADATA", - "README.rst", - "setup.cfg", - "setup.py", - "tox.ini" + "datasource_ids": [ + "pypi_setup_py" ], - "purl": "pkg:pypi/click@8.0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/c/click/click-8.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/click/8.0.1/json" + "purl": "pkg:pypi/click" } ], "files": [ @@ -164,116 +95,28 @@ "path": "LICENSE.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1" - ], + "for_packages": [], "scan_errors": [] }, { "path": "MANIFEST.in", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1" - ], + "for_packages": [], "scan_errors": [] }, { "path": "METADATA", "type": "file", - "package_data": [ - { - "type": "pypi", - "namespace": null, - "name": "click", - "version": "8.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "Python", - "description": "Composable command line interface toolkit\n\\$ click\\_\n==========\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n- Arbitrary nesting of commands\n- Automatic help page generation\n- Supports lazy loading of subcommands at runtime\n\n\nInstalling\n----------\n\nInstall and update using `pip`_:\n\n.. code-block:: text\n\n $ pip install -U click\n\n.. _pip: https://pip.pypa.io/en/stable/quickstart/\n\n\nA Simple Example\n----------------\n\n.. code-block:: python\n\n import click\n\n @click.command()\n @click.option(\"--count\", default=1, help=\"Number of greetings.\")\n @click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\n def hello(count, name):\n \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n for _ in range(count):\n click.echo(f\"Hello, {name}!\")\n\n if __name__ == '__main__':\n hello()\n\n.. code-block:: text\n\n $ python hello.py --count=3\n Your name: Click\n Hello, Click!\n Hello, Click!\n Hello, Click!\n\n\nDonate\n------\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, `please\ndonate today`_.\n\n.. _please donate today: https://palletsprojects.com/donate\n\n\nLinks\n-----\n\n- Documentation: https://click.palletsprojects.com/\n- Changes: https://click.palletsprojects.com/changes/\n- PyPI Releases: https://pypi.org/project/click/\n- Source Code: https://github.com/pallets/click\n- Issue Tracker: https://github.com/pallets/click/issues\n- Website: https://palletsprojects.com/p/click\n- Twitter: https://twitter.com/PalletsTeam\n- Chat: https://discord.gg/pallets", - "release_date": null, - "parties": [ - { - "type": "person", - "role": "author", - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "url": null - }, - { - "type": "person", - "role": "maintainer", - "name": "Pallets", - "email": "contact@palletsprojects.com", - "url": null - } - ], - "keywords": [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - "Programming Language :: Python" - ], - "homepage_url": "https://palletsprojects.com/p/click/", - "download_url": null, - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": "Issue Tracker, https://github.com/pallets/click/issues/", - "code_view_url": "Source Code, https://github.com/pallets/click/", - "vcs_url": null, - "copyright": null, - "license_expression": "bsd-new", - "declared_license": { - "license": "BSD-3-Clause", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:pypi/colorama", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - }, - { - "purl": "pkg:pypi/importlib-metadata", - "extracted_requirement": null, - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": "pkg:pypi/click@8.0.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/c/click/click-8.0.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/click/8.0.1/json" - } - ], - "for_packages": [ - "pkg:pypi/click@8.0.1" - ], + "package_data": [], + "for_packages": [], "scan_errors": [] }, { "path": "README.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/click@8.0.1" - ], + "for_packages": [], "scan_errors": [] }, { @@ -306,18 +149,19 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pypi_setup_cfg", + "purl": null } ], "for_packages": [ - "pkg:pypi/click@8.0.1" + "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -351,8 +195,8 @@ "license_expression": null, "declared_license": {}, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -374,70 +218,23 @@ "resolved_package": {} } ], - "purl": "pkg:pypi/click", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/click", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/click/json" + "api_data_url": "https://pypi.org/pypi/click/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/click" } ], "for_packages": [ - "pkg:pypi/click@8.0.1" + "pkg:pypi/click?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, { "path": "tox.ini", "type": "file", - "package_data": [ - { - "type": "pypi", - "namespace": null, - "name": null, - "version": null, - "qualifiers": {}, - "subpath": null, - "primary_language": "Python", - "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, - "license_expression": null, - "declared_license": null, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "dependencies": [ - { - "purl": "pkg:pypi/pre-commit", - "extracted_requirement": "pre-commit", - "scope": "install", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {} - } - ], - "purl": null, - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], - "for_packages": [ - "pkg:pypi/click@8.0.1" - ], + "package_data": [], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/models/full-expected.json b/tests/packagedcode/data/models/full-expected.json index 9e5fcaf25fb..49cf9ce39cb 100644 --- a/tests/packagedcode/data/models/full-expected.json +++ b/tests/packagedcode/data/models/full-expected.json @@ -39,13 +39,15 @@ "license_expression": "apache-2.0", "declared_license": "apache-2.0", "notice_text": "licensed under the apacche 2.0 \nlicense", - "contains_source_code": true, "source_packages": [ "pkg:maven/aspectj/aspectjtools@1.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, - "purl": "pkg:rpm/fedora/Sample@12.2.3?abc=12&this=that#asdasd/asdasd/asdasd", + "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": null, + "purl": "pkg:rpm/fedora/Sample@12.2.3?abc=12&this=that#asdasd/asdasd/asdasd" } \ No newline at end of file diff --git a/tests/packagedcode/data/models/nested-npm-packages.json b/tests/packagedcode/data/models/nested-npm-packages.json deleted file mode 100644 index 71555a78b76..00000000000 --- a/tests/packagedcode/data/models/nested-npm-packages.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "headers": [ - { - "tool_name": "scancode-toolkit", - "tool_version": "3.0.2.post1250.904952c36", - "options": { - "input": [ - "plugins/scancode-consolidate-scan/tests/data/plugin_consolidate/nested-packages/" - ], - "--json-pp": "plugins/scancode-consolidate-scan/tests/data/plugin_consolidate/nested-npm-packages.json", - "--package": true - }, - "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "start_timestamp": "2019-07-26T200843.397788", - "end_timestamp": "2019-07-26T200845.708729", - "message": null, - "errors": [], - "extra_data": { - "files_count": 4 - } - } - ], - "files": [ - { - "path": "nested-packages", - "type": "directory", - "packages": [ - { - "type": "npm", - "namespace": null, - "name": "test-package", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "apache-2.0", - "declared_license": [ - "apache-2.0" - ], - "notice_text": null, - "root_path": "package.json", - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" - } - ], - "scan_errors": [] - }, - { - "path": "nested-packages/package.json", - "type": "file", - "packages": [], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules", - "type": "directory", - "packages": [], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/bar", - "type": "directory", - "packages": [ - { - "type": "npm", - "namespace": null, - "name": "bar", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/bar/-/bar-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "apache-2.0", - "declared_license": [ - "apache-2.0" - ], - "notice_text": null, - "root_path": "package.json", - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:npm/bar@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/bar", - "repository_download_url": "https://registry.npmjs.org/bar/-/bar-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/bar/0.0.1" - } - ], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/bar/package.json", - "type": "file", - "packages": [], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/foo", - "type": "directory", - "packages": [ - { - "type": "npm", - "namespace": null, - "name": "foo", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/foo/-/foo-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "apache-2.0", - "declared_license": [ - "apache-2.0" - ], - "notice_text": null, - "root_path": "package.json", - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:npm/foo@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/foo", - "repository_download_url": "https://registry.npmjs.org/foo/-/foo-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/foo/0.0.1" - } - ], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/foo/package.json", - "type": "file", - "packages": [], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/foo/node_modules", - "type": "directory", - "packages": [], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/foo/node_modules/bar", - "type": "directory", - "packages": [ - { - "type": "npm", - "namespace": null, - "name": "bar", - "version": "0.0.1", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/bar/-/bar-0.0.1.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "apache-2.0", - "declared_license": [ - "apache-2.0" - ], - "notice_text": null, - "root_path": "package.json", - "dependencies": [], - "contains_source_code": null, - "source_packages": [], - "purl": "pkg:npm/bar@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/bar", - "repository_download_url": "https://registry.npmjs.org/bar/-/bar-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/bar/0.0.1" - } - ], - "scan_errors": [] - }, - { - "path": "nested-packages/node_modules/foo/node_modules/bar/package.json", - "type": "file", - "packages": [], - "scan_errors": [] - } - ] -} diff --git a/tests/packagedcode/data/models/simple-expected.json b/tests/packagedcode/data/models/simple-expected.json index 5439bd8fb28..8d092f26d05 100644 --- a/tests/packagedcode/data/models/simple-expected.json +++ b/tests/packagedcode/data/models/simple-expected.json @@ -35,11 +35,13 @@ "license_expression": "apache-2.0", "declared_license": "apache-2.0", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, - "purl": "pkg:rpm/Sample", + "dependencies": [], "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "rpm_archive", + "purl": "pkg:rpm/Sample" } \ No newline at end of file diff --git a/tests/packagedcode/data/plugin/about-package-expected.json b/tests/packagedcode/data/plugin/about-package-expected.json index 1bcedee5103..f3c1017969b 100644 --- a/tests/packagedcode/data/plugin/about-package-expected.json +++ b/tests/packagedcode/data/plugin/about-package-expected.json @@ -16,13 +16,131 @@ "warnings": [], "extra_data": { "spdx_license_list_version": "3.16", - "files_count": 2 + "files_count": 3 } } ], "dependencies": [], - "packages": [], + "packages": [ + { + "type": "about", + "namespace": null, + "name": "apipkg", + "version": "1.4", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "Holger Krekel", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://bitbucket.org/hpk42/apipkg", + "download_url": "https://pypi.python.org/packages/94/72/fd4f2e46ce7b0d388191c819ef691c8195fab09602bbf1a2f92aa5351444/apipkg-1.4-py2.py3-none-any.whl#md5=5644eb6aff3f19e13430251a820e987f", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2009 holger krekel", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "apipkg.ABOUT" + ], + "datasource_ids": [ + "about_file" + ], + "purl": "pkg:about/apipkg@1.4" + }, + { + "type": "about", + "namespace": null, + "name": "appdirs", + "version": "1.4.3", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": null, + "release_date": null, + "parties": [ + { + "type": "person", + "role": "owner", + "name": "ActiveState", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "https://pypi.python.org/pypi/appdirs", + "download_url": "https://pypi.python.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl#md5=9ed4b51c9611775c3078b3831072e153", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": "Copyright (c) 2010 ActiveState Software Inc.", + "license_expression": "mit", + "declared_license": "mit", + "notice_text": null, + "source_packages": [], + "extra_data": { + "missing_file_references": [ + { + "path": "appdirs-1.4.3-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ] + }, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:about/appdirs@1.4.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "appdirs.ABOUT" + ], + "datasource_ids": [ + "about_file" + ], + "purl": "pkg:about/appdirs@1.4.3" + } + ], "files": [ + { + "path": "apipkg-1.4-py2.py3-none-any.whl", + "type": "file", + "package_data": [], + "for_packages": [ + "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, { "path": "apipkg.ABOUT", "type": "file", @@ -61,19 +179,30 @@ "license_expression": "mit", "declared_license": "mit", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": { - "about_resource": "apipkg-1.4-py2.py3-none-any.whl" - }, + "file_references": [ + { + "path": "apipkg-1.4-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:about/apipkg@1.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/apipkg@1.4" } ], - "for_packages": [], + "for_packages": [ + "pkg:about/apipkg@1.4?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -114,19 +243,30 @@ "license_expression": "mit", "declared_license": "mit", "notice_text": null, - "contains_source_code": null, "source_packages": [], - "extra_data": { - "about_resource": "appdirs-1.4.3-py2.py3-none-any.whl" - }, + "file_references": [ + { + "path": "appdirs-1.4.3-py2.py3-none-any.whl", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + } + ], + "extra_data": {}, "dependencies": [], - "purl": "pkg:about/appdirs@1.4.3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "about_file", + "purl": "pkg:about/appdirs@1.4.3" } ], - "for_packages": [], + "for_packages": [ + "pkg:about/appdirs@1.4.3?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/bower-package-expected.json b/tests/packagedcode/data/plugin/bower-package-expected.json index bece5f96116..f6b4868cd64 100644 --- a/tests/packagedcode/data/plugin/bower-package-expected.json +++ b/tests/packagedcode/data/plugin/bower-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:bower/get-size", - "for_package": "pkg:bower/blue-leaf", - "lockfile": "bower.json" + "dependency_uid": "pkg:bower/get-size?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/blue-leaf?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "bower.json", + "datasource_id": "bower_json" }, { "purl": "pkg:bower/eventEmitter", @@ -41,9 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:bower/eventEmitter", - "for_package": "pkg:bower/blue-leaf", - "lockfile": "bower.json" + "dependency_uid": "pkg:bower/eventEmitter?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/blue-leaf?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "bower.json", + "datasource_id": "bower_json" }, { "purl": "pkg:bower/qunit", @@ -53,9 +55,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:bower/qunit", - "for_package": "pkg:bower/blue-leaf", - "lockfile": "bower.json" + "dependency_uid": "pkg:bower/qunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:bower/blue-leaf?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "bower.json", + "datasource_id": "bower_json" } ], "packages": [ @@ -99,20 +102,19 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:bower/blue-leaf", - "package_data_files": [ + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:bower/blue-leaf?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "bower.json" ], - "files": [ - "bower.json" + "datasource_ids": [ + "bower_json" ], - "purl": "pkg:bower/blue-leaf", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:bower/blue-leaf" } ], "files": [ @@ -155,13 +157,13 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": null, "declared_license": [ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -192,14 +194,15 @@ "resolved_package": {} } ], - "purl": "pkg:bower/blue-leaf", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "bower_json", + "purl": "pkg:bower/blue-leaf" } ], "for_packages": [ - "pkg:bower/blue-leaf" + "pkg:bower/blue-leaf?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/cargo-package-expected.json b/tests/packagedcode/data/plugin/cargo-package-expected.json index b85bdcc32f2..659295d726f 100644 --- a/tests/packagedcode/data/plugin/cargo-package-expected.json +++ b/tests/packagedcode/data/plugin/cargo-package-expected.json @@ -42,7 +42,7 @@ } ], "keywords": [], - "homepage_url": null, + "homepage_url": "https://clap.rs/", "download_url": null, "size": null, "sha1": null, @@ -51,25 +51,24 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/clap-rs/clap", "copyright": null, "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:cargo/clap@2.32.0", - "package_data_files": [ + "repository_homepage_url": "https://crates.io/crates/clap", + "repository_download_url": "https://crates.io/api/v1/crates/clap/2.32.0/download", + "api_data_url": "https://crates.io/api/v1/crates/clap", + "package_uid": "pkg:cargo/clap@2.32.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "Cargo.toml" ], - "files": [ - "Cargo.toml" + "datasource_ids": [ + "cargo_toml" ], - "purl": "pkg:cargo/clap@2.32.0", - "repository_homepage_url": "https://crates.io/crates/clap", - "repository_download_url": "https://crates.io/api/v1/crates/clap/2.32.0/download", - "api_data_url": "https://crates.io/api/v1/crates/clap" + "purl": "pkg:cargo/clap@2.32.0" } ], "files": [ @@ -97,7 +96,7 @@ } ], "keywords": [], - "homepage_url": null, + "homepage_url": "https://clap.rs/", "download_url": null, "size": null, "sha1": null, @@ -106,23 +105,24 @@ "sha512": null, "bug_tracking_url": null, "code_view_url": null, - "vcs_url": null, + "vcs_url": "https://github.com/clap-rs/clap", "copyright": null, - "license_expression": "mit", + "license_expression": null, "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/clap@2.32.0", "repository_homepage_url": "https://crates.io/crates/clap", "repository_download_url": "https://crates.io/api/v1/crates/clap/2.32.0/download", - "api_data_url": "https://crates.io/api/v1/crates/clap" + "api_data_url": "https://crates.io/api/v1/crates/clap", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/clap@2.32.0" } ], "for_packages": [ - "pkg:cargo/clap@2.32.0" + "pkg:cargo/clap@2.32.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/chef-package-expected.json b/tests/packagedcode/data/plugin/chef-package-expected.json index 47e9eb651a2..d3a6dfbc131 100644 --- a/tests/packagedcode/data/plugin/chef-package-expected.json +++ b/tests/packagedcode/data/plugin/chef-package-expected.json @@ -23,27 +23,29 @@ "dependencies": [ { "purl": "pkg:chef/nodejs", - "extracted_requirement": ">= 0.0.0", + "extracted_requirement": null, "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:chef/nodejs", - "for_package": "pkg:chef/301@0.1.0", - "lockfile": "metadata.json" + "dependency_uid": "pkg:chef/nodejs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "metadata.rb", + "datasource_id": "chef_cookbook_metadata_rb" }, { "purl": "pkg:chef/nodejs", - "extracted_requirement": null, + "extracted_requirement": ">= 0.0.0", "scope": "dependencies", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:chef/nodejs", - "for_package": "pkg:chef/301@0.1.0", - "lockfile": "metadata.rb" + "dependency_uid": "pkg:chef/nodejs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "metadata.json", + "datasource_id": "chef_cookbook_metadata_json" } ], "packages": [ @@ -81,22 +83,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:chef/301@0.1.0", - "package_data_files": [ - "metadata.json", + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", + "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "package_uid": "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "metadata.rb" ], - "files": [ - "metadata.json", - "metadata.rb" + "datasource_ids": [ + "chef_cookbook_metadata_rb" ], - "purl": "pkg:chef/301@0.1.0", - "repository_homepage_url": null, - "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0" + "purl": "pkg:chef/301@0.1.0" } ], "files": [ @@ -138,8 +137,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,14 +151,15 @@ "resolved_package": {} } ], - "purl": "pkg:chef/301@0.1.0", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_json", + "purl": "pkg:chef/301@0.1.0" } ], "for_packages": [ - "pkg:chef/301@0.1.0" + "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -201,8 +201,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -215,14 +215,15 @@ "resolved_package": {} } ], - "purl": "pkg:chef/301@0.1.0", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/", "repository_download_url": "https://supermarket.chef.io/cookbooks/301/versions/0.1.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/301/versions/0.1.0", + "datasource_id": "chef_cookbook_metadata_rb", + "purl": "pkg:chef/301@0.1.0" } ], "for_packages": [ - "pkg:chef/301@0.1.0" + "pkg:chef/301@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/com-package-expected.json b/tests/packagedcode/data/plugin/com-package-expected.json index a2f51d3ffbd..692ee7b656e 100644 --- a/tests/packagedcode/data/plugin/com-package-expected.json +++ b/tests/packagedcode/data/plugin/com-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Microsoft\u00ae Windows\u00ae Operating System", - "version": "10.0.17763.1", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "Change CodePage Utility", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1", - "package_data_files": [ - "chcp.com" - ], - "files": [ - "chcp.com" - ], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "chcp.com", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1" } ], - "for_packages": [ - "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/conda-package-expected.json b/tests/packagedcode/data/plugin/conda-package-expected.json index 8f0d82ca1e6..6fcca02be98 100644 --- a/tests/packagedcode/data/plugin/conda-package-expected.json +++ b/tests/packagedcode/data/plugin/conda-package-expected.json @@ -20,28 +20,232 @@ } } ], - "dependencies": [], - "packages": [], + "dependencies": [ + { + "purl": "pkg:conda/zlib", + "extracted_requirement": "1.2.8 3", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/zlib?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/setuptools", + "extracted_requirement": "27.2.0 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/setuptools?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/sqlite", + "extracted_requirement": "3.13.0 0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/sqlite?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/openssl", + "extracted_requirement": "1.0.2k 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/openssl?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/xz", + "extracted_requirement": "5.2.2 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/xz?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/krb5", + "extracted_requirement": "1.13.2 0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/krb5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/pykerberos", + "extracted_requirement": "1.1.10 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/pykerberos?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/python", + "extracted_requirement": "3.5.3 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/python?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/requests", + "extracted_requirement": "2.13.0 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/requests?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/python", + "extracted_requirement": "", + "scope": "run", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/python?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/requests", + "extracted_requirement": ">=1.1.0", + "scope": "run", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/requests?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + }, + { + "purl": "pkg:conda/pykerberos", + "extracted_requirement": ">=1.1.8,<2.0.0", + "scope": "run", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:conda/pykerberos?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "info/recipe.tar-extract/recipe/meta.yaml", + "datasource_id": "conda_meta_yaml" + } + ], + "packages": [ + { + "type": "conda", + "namespace": null, + "name": "requests-kerberos", + "version": "0.8.0", + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "description": "Kerberos authentication handler for python-requests", + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "https://github.com/requests/requests-kerberos", + "download_url": "https://pypi.python.org/packages/source/r/requests-kerberos/requests-kerberos-0.8.0.tar.gz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "unknown", + "declared_license": "Other", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "info/recipe.tar-extract/recipe/meta.yaml" + ], + "datasource_ids": [ + "conda_meta_yaml" + ], + "purl": "pkg:conda/requests-kerberos@0.8.0" + } + ], "files": [ { "path": "info", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "info/recipe.tar-extract", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "info/recipe.tar-extract/recipe", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -74,14 +278,95 @@ "license_expression": "unknown", "declared_license": "Other", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ + { + "purl": "pkg:conda/zlib", + "extracted_requirement": "1.2.8 3", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/setuptools", + "extracted_requirement": "27.2.0 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/sqlite", + "extracted_requirement": "3.13.0 0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/openssl", + "extracted_requirement": "1.0.2k 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/xz", + "extracted_requirement": "5.2.2 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/krb5", + "extracted_requirement": "1.13.2 0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/pykerberos", + "extracted_requirement": "1.1.10 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/python", + "extracted_requirement": "3.5.3 1", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:conda/requests", + "extracted_requirement": "2.13.0 py35_0", + "scope": "build", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, { "purl": "pkg:conda/python", - "extracted_requirement": null, - "scope": "dependencies", + "extracted_requirement": "", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -90,7 +375,7 @@ { "purl": "pkg:conda/requests", "extracted_requirement": ">=1.1.0", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, @@ -99,20 +384,23 @@ { "purl": "pkg:conda/pykerberos", "extracted_requirement": ">=1.1.8,<2.0.0", - "scope": "dependencies", + "scope": "run", "is_runtime": true, "is_optional": false, "is_resolved": false, "resolved_package": {} } ], - "purl": "pkg:conda/requests-kerberos@0.8.0", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "conda_meta_yaml", + "purl": "pkg:conda/requests-kerberos@0.8.0" } ], - "for_packages": [], + "for_packages": [ + "pkg:conda/requests-kerberos@0.8.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/cran-package-expected.json b/tests/packagedcode/data/plugin/cran-package-expected.json index 32b2e118d32..7aa8dced302 100644 --- a/tests/packagedcode/data/plugin/cran-package-expected.json +++ b/tests/packagedcode/data/plugin/cran-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:cran/R", - "for_package": "pkg:cran/codetools@0.2-16", - "lockfile": "DESCRIPTION" + "dependency_uid": "pkg:cran/R?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:cran/codetools@0.2-16?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "DESCRIPTION", + "datasource_id": "cran_description" } ], "packages": [ @@ -76,20 +77,19 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:cran/codetools@0.2-16", - "package_data_files": [ + "repository_homepage_url": "https://cran.r-project.org/package=codetools", + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:cran/codetools@0.2-16?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "DESCRIPTION" ], - "files": [ - "DESCRIPTION" + "datasource_ids": [ + "cran_description" ], - "purl": "pkg:cran/codetools@0.2-16", - "repository_homepage_url": "https://cran.r-project.org/package=codetools", - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:cran/codetools@0.2-16" } ], "files": [ @@ -138,8 +138,8 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -152,14 +152,15 @@ "resolved_package": {} } ], - "purl": "pkg:cran/codetools@0.2-16", "repository_homepage_url": "https://cran.r-project.org/package=codetools", "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "cran_description", + "purl": "pkg:cran/codetools@0.2-16" } ], "for_packages": [ - "pkg:cran/codetools@0.2-16" + "pkg:cran/codetools@0.2-16?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/freebsd-package-expected.json b/tests/packagedcode/data/plugin/freebsd-package-expected.json index 08281f1df70..2a4bc1e2f8a 100644 --- a/tests/packagedcode/data/plugin/freebsd-package-expected.json +++ b/tests/packagedcode/data/plugin/freebsd-package-expected.json @@ -66,20 +66,19 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", - "package_data_files": [ + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "+COMPACT_MANIFEST" ], - "files": [ - "+COMPACT_MANIFEST" + "datasource_ids": [ + "freebsd_compact_manifest" ], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" } ], "files": [ @@ -131,18 +130,19 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" } ], "for_packages": [ - "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" + "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/haxe-package-expected.json b/tests/packagedcode/data/plugin/haxe-package-expected.json index 6500729d5ef..8b6daa136c3 100644 --- a/tests/packagedcode/data/plugin/haxe-package-expected.json +++ b/tests/packagedcode/data/plugin/haxe-package-expected.json @@ -61,20 +61,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:haxe/hxsocketio@0.1.0", - "package_data_files": [ + "repository_homepage_url": "https://lib.haxe.org/p/hxsocketio", + "repository_download_url": "https://lib.haxe.org/p/hxsocketio/0.1.0/download/", + "api_data_url": null, + "package_uid": "pkg:haxe/hxsocketio@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "haxelib.json" ], - "files": [ - "haxelib.json" + "datasource_ids": [ + "haxelib_json" ], - "purl": "pkg:haxe/hxsocketio@0.1.0", - "repository_homepage_url": "https://lib.haxe.org/p/hxsocketio", - "repository_download_url": "https://lib.haxe.org/p/hxsocketio/0.1.0/download/", - "api_data_url": null + "purl": "pkg:haxe/hxsocketio@0.1.0" } ], "files": [ @@ -121,18 +120,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:haxe/hxsocketio@0.1.0", "repository_homepage_url": "https://lib.haxe.org/p/hxsocketio", "repository_download_url": "https://lib.haxe.org/p/hxsocketio/0.1.0/download/", - "api_data_url": null + "api_data_url": null, + "datasource_id": "haxelib_json", + "purl": "pkg:haxe/hxsocketio@0.1.0" } ], "for_packages": [ - "pkg:haxe/hxsocketio@0.1.0" + "pkg:haxe/hxsocketio@0.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/help.txt b/tests/packagedcode/data/plugin/help.txt index ddeca209099..a604e7c30f4 100644 --- a/tests/packagedcode/data/plugin/help.txt +++ b/tests/packagedcode/data/plugin/help.txt @@ -1,411 +1,819 @@ -------------------------------------------- -Package: METADATA.bzl - class: packagedcode.build:MetadataBzl - file_patterns: METADATA.bzl - --------------------------------------------- -Package: about - class: packagedcode.about:Aboutfile - file_patterns: *.ABOUT - extensions: .ABOUT - --------------------------------------------- -Package: android - class: packagedcode.models:AndroidApp - extensions: .apk - filetypes: zip archive - --------------------------------------------- -Package: android-lib - class: packagedcode.models:AndroidLibrary - extensions: .aar - filetypes: zip archive - --------------------------------------------- -Package: autotools - class: packagedcode.build:AutotoolsPackage - file_patterns: configure, configure.ac - --------------------------------------------- -Package: axis2 - class: packagedcode.models:Axis2Mar - file_patterns: META-INF/module.xml - extensions: .mar - filetypes: java archive , zip archive - --------------------------------------------- -Package: bazel - class: packagedcode.build:BazelPackage - file_patterns: BUILD - --------------------------------------------- -Package: bower - class: packagedcode.bower:BowerJson - file_patterns: bower.json, .bower.json - extensions: .json - --------------------------------------------- -Package: buck - class: packagedcode.build:BuckPackage - file_patterns: BUCK - --------------------------------------------- -Package: build.gradle - class: packagedcode.build_gradle:BuildGradle - file_patterns: build.gradle - extensions: .gradle - --------------------------------------------- -Package: cab - class: packagedcode.models:CabPackage - extensions: .cab - filetypes: microsoft cabinet - --------------------------------------------- -Package: cargo - class: packagedcode.cargo:CargoToml - file_patterns: Cargo.toml - extensions: .toml - --------------------------------------------- -Package: cargo - class: packagedcode.cargo:CargoLock - file_patterns: Cargo.lock - extensions: .lock - --------------------------------------------- -Package: chef - class: packagedcode.chef:MetadataJson - file_patterns: metadata.json - extensions: .json - filetypes: .tgz - --------------------------------------------- -Package: chef - class: packagedcode.chef:Metadatarb - file_patterns: metadata.rb - extensions: .rb - filetypes: .tgz - --------------------------------------------- -Package: chrome - class: packagedcode.models:ChromeExtension - extensions: .crx - filetypes: data - --------------------------------------------- -Package: composer - class: packagedcode.phpcomposer:ComposerJson - file_patterns: composer.json - extensions: .json - --------------------------------------------- -Package: composer - class: packagedcode.phpcomposer:ComposerLock - file_patterns: composer.lock - extensions: .lock - --------------------------------------------- -Package: conda - class: packagedcode.conda:Condayml - file_patterns: meta.yaml, META.yml - extensions: .yml, .yaml - --------------------------------------------- -Package: cpan - class: packagedcode.models:CpanModule - file_patterns: *.pod, *.pm, MANIFEST, Makefile.PL, META.yml, META.json, *.meta, dist.ini - extensions: .tar.gz - --------------------------------------------- -Package: cran - class: packagedcode.cran:DescriptionFile - file_patterns: DESCRIPTION - --------------------------------------------- -Package: deb - class: packagedcode.debian:DebianPackage - file_patterns: *.control - extensions: .deb - filetypes: debian binary package - --------------------------------------------- -Package: dmg - class: packagedcode.models:AppleDmgPackage - extensions: .dmg, .sparseimage - filetypes: zlib compressed - --------------------------------------------- -Package: ear - class: packagedcode.models:JavaEar - file_patterns: META-INF/application.xml, META-INF/ejb-jar.xml - extensions: .ear - filetypes: java archive , zip archive - --------------------------------------------- -Package: freebsd - class: packagedcode.freebsd:CompactManifest - file_patterns: +COMPACT_MANIFEST - --------------------------------------------- -Package: gem - class: packagedcode.rubygems:GemArchive - file_patterns: *.gem - extensions: .gem - filetypes: .tar, tar archive - --------------------------------------------- -Package: gem - class: packagedcode.rubygems:GemArchiveExtracted - file_patterns: metadata.gz-extract - extensions: .gz-extract - filetypes: .tar, tar archive - --------------------------------------------- -Package: gem - class: packagedcode.rubygems:GemSpec - file_patterns: *.gemspec - extensions: .gemspec - filetypes: .tar, tar archive - --------------------------------------------- -Package: gem - class: packagedcode.rubygems:GemfileLock - file_patterns: Gemfile.lock - extensions: .lock - filetypes: .tar, tar archive - --------------------------------------------- -Package: golang - class: packagedcode.golang:GoMod - file_patterns: go.mod - extensions: .mod - --------------------------------------------- -Package: golang - class: packagedcode.golang:GoSum - file_patterns: go.sum - extensions: .sum - --------------------------------------------- -Package: haxe - class: packagedcode.haxe:HaxelibJson - file_patterns: haxelib.json - extensions: .json - --------------------------------------------- -Package: installshield - class: packagedcode.models:InstallShieldPackage - extensions: .exe - filetypes: installshield - --------------------------------------------- -Package: ios - class: packagedcode.models:IOSApp - extensions: .ipa - filetypes: zip archive - --------------------------------------------- -Package: iso - class: packagedcode.models:IsoImagePackage - extensions: .iso, .udf, .img - filetypes: iso 9660 cd-rom, high sierra cd-rom - --------------------------------------------- -Package: ivy - class: packagedcode.jar_manifest:IvyJar - file_patterns: ivy.xml - filetypes: java archive , zip archive - --------------------------------------------- -Package: jar - class: packagedcode.models:JavaJar - file_patterns: META-INF/MANIFEST.MF - extensions: .jar - filetypes: java archive , zip archive - --------------------------------------------- -Package: jar - class: packagedcode.jar_manifest:JavaManifest - file_patterns: META-INF/MANIFEST.MF - extensions: .jar, .war, .ear - filetypes: java archive , zip archive - --------------------------------------------- -Package: jboss - class: packagedcode.models:JBossSar - file_patterns: META-INF/jboss-service.xml - extensions: .sar - filetypes: java archive , zip archive - --------------------------------------------- -Package: maven - class: packagedcode.maven:PomXml - file_patterns: *.pom, pom.xml - extensions: .pom - --------------------------------------------- -Package: meteor - class: packagedcode.models:MeteorPackage - file_patterns: package.js - --------------------------------------------- -Package: mozilla - class: packagedcode.models:MozillaExtension - extensions: .xpi - filetypes: zip archive - --------------------------------------------- -Package: msi - class: packagedcode.msi:MsiInstallerPackage - extensions: .msi - filetypes: msi installer - --------------------------------------------- -Package: npm - class: packagedcode.npm:PackageJson - file_patterns: package.json - extensions: .tgz - --------------------------------------------- -Package: npm - class: packagedcode.npm:PackageLockJson - file_patterns: npm-shrinkwrap.json, package-lock.json - extensions: .tgz - --------------------------------------------- -Package: npm - class: packagedcode.npm:YarnLockJson - file_patterns: yarn.lock - extensions: .tgz - --------------------------------------------- -Package: nsis - class: packagedcode.models:NSISInstallerPackage - extensions: .exe - filetypes: nullsoft installer - --------------------------------------------- -Package: nuget - class: packagedcode.nuget:Nuspec - file_patterns: *.nuspec - extensions: .nuspec - filetypes: zip archive, microsoft ooxml - --------------------------------------------- -Package: opam - class: packagedcode.opam:OpamFile - file_patterns: *opam - extensions: .opam - --------------------------------------------- -Package: pods - class: packagedcode.cocoapods:Podspec - file_patterns: *.podspec - extensions: .podspec - --------------------------------------------- -Package: pods - class: packagedcode.cocoapods:PodfileLock - file_patterns: *podfile.lock - extensions: .lock - --------------------------------------------- -Package: pods - class: packagedcode.cocoapods:PodspecJson - file_patterns: *.podspec.json - extensions: .json - --------------------------------------------- -Package: pubspec - class: packagedcode.pubspec:PubspecYaml - file_patterns: *pubspec.yaml - extensions: .yaml - --------------------------------------------- -Package: pubspec - class: packagedcode.pubspec:PubspecLock - file_patterns: *pubspec.lock - extensions: .lock - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:MetadataFile - file_patterns: PKG-INFO, METADATA - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:BinaryDistArchive - file_patterns: *.whl, *.egg - extensions: .whl, .egg - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:SourceDistArchive - file_patterns: *.tar.gz, *.tar.bz2, *.zip - extensions: .tar.gz, .tar.bz2, .zip - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:SetupPy - file_patterns: setup.py - extensions: .py - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:DependencyFile - file_patterns: Pipfile, conda.yml, setup.cfg, tox.ini - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:PipfileLock - file_patterns: Pipfile.lock - extensions: .lock - --------------------------------------------- -Package: pypi - class: packagedcode.pypi:RequirementsFile - file_patterns: *requirement*.txt, *requirement*.pip, *requirement*.in, requires.txt, requirements/*.txt, requirements/*.pip, requirements/*.in - --------------------------------------------- -Package: readme - class: packagedcode.readme:ReadmeManifest - file_patterns: README.android, README.chromium, README.facebook, README.google, README.thirdparty - --------------------------------------------- -Package: rpm - class: packagedcode.rpm:RpmManifest - file_patterns: *.spec - extensions: .rpm, .srpm, .mvl, .vip - filetypes: rpm - --------------------------------------------- -Package: shar - class: packagedcode.models:SharPackage - extensions: .sha, .shar, .bin - filetypes: posix shell script - --------------------------------------------- -Package: squashfs - class: packagedcode.models:SquashfsPackage - filetypes: squashfs - --------------------------------------------- -Package: war - class: packagedcode.models:JavaWar - file_patterns: WEB-INF/web.xml - extensions: .war - filetypes: java archive , zip archive - --------------------------------------------- -Package: windows-update - class: packagedcode.windows:MicrosoftUpdateManifest - extensions: .mum - filetypes: xml 1.0 document - --------------------------------------------- -Package: winexe - class: packagedcode.win_pe:WindowsExecutable - extensions: .exe, .dll, .mui, .mun, .com, .winmd, .sys, .tlb, .exe_*, .dll_*, .mui_*, .mun_*, .com_*, .winmd_*, .sys_*, .tlb_* - filetypes: pe32, for ms windows - +Package type: None + datasource_id: java_jar + documentation URL: https://en.wikipedia.org/wiki/JAR_(file_format) + primary language: None + description: JAR Java Archive + path_patterns: '*.jar' +-------------------------------------------- +Package type: about + datasource_id: about_file + documentation URL: https://aboutcode-toolkit.readthedocs.io/en/latest/specification.html + primary language: None + description: AboutCode ABOUT file + path_patterns: '*.ABOUT' +-------------------------------------------- +Package type: alpine + datasource_id: alpine_apk_archive + documentation URL: https://wiki.alpinelinux.org/wiki/Alpine_package_format + primary language: None + description: Alpine Linux .apk package archive + path_patterns: '*.apk' +-------------------------------------------- +Package type: alpine + datasource_id: alpine_apkbuild + documentation URL: https://wiki.alpinelinux.org/wiki/APKBUILD_Reference + primary language: None + description: Alpine Linux APKBUILD package script + path_patterns: '*APKBUILD' +-------------------------------------------- +Package type: alpine + datasource_id: alpine_installed_db + documentation URL: None + primary language: None + description: Alpine Linux installed package database + path_patterns: '*lib/apk/db/installed' +-------------------------------------------- +Package type: android + datasource_id: android_apk + documentation URL: https://en.wikipedia.org/wiki/Apk_(file_format) + primary language: Java + description: Android application package + path_patterns: '*.apk' +-------------------------------------------- +Package type: android_lib + datasource_id: android_aar_library + documentation URL: https://developer.android.com/studio/projects/android-library + primary language: Java + description: Android library archive + path_patterns: '*.aar' +-------------------------------------------- +Package type: autotools + datasource_id: autotools_configure + documentation URL: https://www.gnu.org/software/automake/ + primary language: None + description: Autotools configure script + path_patterns: '*/configure', '*/configure.ac' +-------------------------------------------- +Package type: axis2 + datasource_id: axis2_mar + documentation URL: https://axis.apache.org/axis2/java/core/docs/modules.html + primary language: Java + description: Apache Axis2 module archive + path_patterns: '*.mar' +-------------------------------------------- +Package type: axis2 + datasource_id: axis2_module_xml + documentation URL: https://axis.apache.org/axis2/java/core/docs/modules.html + primary language: Java + description: Apache Axis2 module.xml + path_patterns: '*/meta-inf/module.xml' +-------------------------------------------- +Package type: bazel + datasource_id: bazel_build + documentation URL: https://bazel.build/ + primary language: None + description: Bazel BUILD + path_patterns: '*/BUILD' +-------------------------------------------- +Package type: bower + datasource_id: bower_json + documentation URL: https://bower.io + primary language: JavaScript + description: Bower package + path_patterns: '*/bower.json', '*/.bower.json' +-------------------------------------------- +Package type: buck + datasource_id: buck_file + documentation URL: https://buck.build/ + primary language: None + description: Buck file + path_patterns: '*/BUCK' +-------------------------------------------- +Package type: buck + datasource_id: buck_metadata + documentation URL: https://buck.build/ + primary language: None + description: Buck metadata file + path_patterns: '*/METADATA.bzl' +-------------------------------------------- +Package type: cab + datasource_id: microsoft_cabinet + documentation URL: https://docs.microsoft.com/en-us/windows/win32/msi/cabinet-files + primary language: C + description: Microsoft cabinet archive + path_patterns: '*.cab' +-------------------------------------------- +Package type: cargo + datasource_id: cargo_lock + documentation URL: https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html + primary language: Rust + description: Rust Cargo.lock dependencies lockfile + path_patterns: '*/Cargo.lock', '*/cargo.lock' +-------------------------------------------- +Package type: cargo + datasource_id: cargo_toml + documentation URL: https://doc.rust-lang.org/cargo/reference/manifest.html + primary language: Rust + description: Rust Cargo.toml package manifest + path_patterns: '*/Cargo.toml', '*/cargo.toml' +-------------------------------------------- +Package type: chef + datasource_id: chef_cookbook_metadata_json + documentation URL: https://docs.chef.io/config_rb_metadata/ + primary language: Ruby + description: Chef cookbook metadata.json + path_patterns: '*/metadata.json' +-------------------------------------------- +Package type: chef + datasource_id: chef_cookbook_metadata_rb + documentation URL: https://docs.chef.io/config_rb_metadata/ + primary language: Ruby + description: Chef cookbook metadata.rb + path_patterns: '*/metadata.rb' +-------------------------------------------- +Package type: chrome + datasource_id: chrome_crx + documentation URL: https://chrome.google.com/extensions + primary language: JavaScript + description: Chrome extension + path_patterns: '*.crx' +-------------------------------------------- +Package type: composer + datasource_id: php_composer_json + documentation URL: https://getcomposer.org/doc/04-schema.md + primary language: PHP + description: PHP composer manifest + path_patterns: '*composer.json' +-------------------------------------------- +Package type: composer + datasource_id: php_composer_lock + documentation URL: https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control + primary language: PHP + description: PHP composer lockfile + path_patterns: '*composer.lock' +-------------------------------------------- +Package type: conda + datasource_id: conda_meta_yaml + documentation URL: https://docs.conda.io/ + primary language: None + description: Conda meta.yml manifest + path_patterns: '*/meta.yaml' +-------------------------------------------- +Package type: cpan + datasource_id: cpan_dist_ini + documentation URL: https://metacpan.org/pod/Dist::Zilla::Tutorial + primary language: Perl + description: CPAN Perl dist.ini + path_patterns: '*/dist.ini' +-------------------------------------------- +Package type: cpan + datasource_id: cpan_makefile + documentation URL: https://www.perlmonks.org/?node_id=128077 + primary language: Perl + description: CPAN Perl Makefile.PL + path_patterns: '*/Makefile.PL' +-------------------------------------------- +Package type: cpan + datasource_id: cpan_manifest + documentation URL: https://metacpan.org/pod/Module::Manifest + primary language: Perl + description: CPAN Perl module MANIFEST + path_patterns: '*/MANIFEST' +-------------------------------------------- +Package type: cpan + datasource_id: cpan_meta_json + documentation URL: https://metacpan.org/pod/Parse::CPAN::Meta + primary language: Perl + description: CPAN Perl META.json + path_patterns: '*/META.json' +-------------------------------------------- +Package type: cpan + datasource_id: cpan_meta_yml + documentation URL: https://metacpan.org/pod/CPAN::Meta::YAML + primary language: Perl + description: CPAN Perl META.yml + path_patterns: '*/META.yml' +-------------------------------------------- +Package type: cran + datasource_id: cran_description + documentation URL: https://r-pkgs.org/description.html + primary language: R + description: CRAN package DESCRIPTION + path_patterns: '*/DESCRIPTION' +-------------------------------------------- +Package type: deb + datasource_id: debian_control_extracted_deb + documentation URL: https://www.debian.org/doc/debian-policy/ch-controlfields.html + primary language: None + description: Debian control file - extracted layout + path_patterns: '*/control.tar.gz-extract/control' +-------------------------------------------- +Package type: deb + datasource_id: debian_control_in_source + documentation URL: https://www.debian.org/doc/debian-policy/ch-controlfields.html + primary language: None + description: Debian control file - source layout + path_patterns: '*/debian/control' +-------------------------------------------- +Package type: deb + datasource_id: debian_copyright_in_package + documentation URL: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + primary language: None + description: Debian machine readable file in source + path_patterns: '*usr/share/doc/*/copyright' +-------------------------------------------- +Package type: deb + datasource_id: debian_copyright_in_source + documentation URL: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + primary language: None + description: Debian machine readable file in source + path_patterns: '*/debian/copyright' +-------------------------------------------- +Package type: deb + datasource_id: debian_deb + documentation URL: https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html + primary language: None + description: Debian binary package archive + path_patterns: '*.deb' +-------------------------------------------- +Package type: deb + datasource_id: debian_distroless_installed_db + documentation URL: https://www.debian.org/doc/debian-policy/ch-controlfields.html + primary language: None + description: Debian distroless installed database + path_patterns: '*var/lib/dpkg/status.d/*' +-------------------------------------------- +Package type: deb + datasource_id: debian_installed_files_list + documentation URL: None + primary language: None + description: Debian installed file paths list + path_patterns: '*var/lib/dpkg/info/*.list' +-------------------------------------------- +Package type: deb + datasource_id: debian_installed_md5sums + documentation URL: https://www.debian.org/doc/manuals/debian-handbook/sect.package-meta-information.en.html#sect.configuration-scripts + primary language: None + description: Debian installed file MD5 and paths list + path_patterns: '*var/lib/dpkg/info/*.md5sums' +-------------------------------------------- +Package type: deb + datasource_id: debian_installed_status_db + documentation URL: https://www.debian.org/doc/debian-policy/ch-controlfields.html + primary language: None + description: Debian installed packages database + path_patterns: '*var/lib/dpkg/status' +-------------------------------------------- +Package type: deb + datasource_id: debian_md5sums_in_extracted_deb + documentation URL: https://www.debian.org/doc/manuals/debian-handbook/sect.package-meta-information.en.html#sect.configuration-scripts + primary language: None + description: Debian file MD5 and paths list in .deb archive + path_patterns: '*/control.tar.gz-extract/md5sums', '*/control.tar.xz-extract/md5sums' +-------------------------------------------- +Package type: deb + datasource_id: debian_original_source_tarball + documentation URL: https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html + primary language: None + description: Debian package original source archive + path_patterns: '*.orig.tar.xz', '*.orig.tar.gz' +-------------------------------------------- +Package type: deb + datasource_id: debian_source_control_dsc + documentation URL: https://wiki.debian.org/dsc + primary language: None + description: Debian source control file + path_patterns: '*.dsc' +-------------------------------------------- +Package type: deb + datasource_id: debian_source_metadata_tarball + documentation URL: https://manpages.debian.org/unstable/dpkg-dev/deb.5.en.html + primary language: None + description: Debian source package metadata archive + path_patterns: '*.debian.tar.xz', '*.debian.tar.gz' +-------------------------------------------- +Package type: dmg + datasource_id: apple_dmg + documentation URL: + primary language: None + description: + path_patterns: '*.dmg', '*.sparseimage' +-------------------------------------------- +Package type: ear + datasource_id: java_ear_application_xml + documentation URL: https://en.wikipedia.org/wiki/EAR_(file_format) + primary language: Java + description: Java EAR application.xml + path_patterns: '*/META-INF/application.xml' +-------------------------------------------- +Package type: ear + datasource_id: java_ear_archive + documentation URL: https://en.wikipedia.org/wiki/EAR_(file_format) + primary language: Java + description: Java EAR Enterprise application archive + path_patterns: '*.ear' +-------------------------------------------- +Package type: freebsd + datasource_id: freebsd_compact_manifest + documentation URL: https://www.freebsd.org/cgi/man.cgi?pkg-create(8)#MANIFEST_FILE_DETAILS + primary language: None + description: FreeBSD compact package manifest + path_patterns: '*/+COMPACT_MANIFEST' +-------------------------------------------- +Package type: gem + datasource_id: gem_archive + documentation URL: https://web.archive.org/web/20220326093616/https://piotrmurach.com/articles/looking-inside-a-ruby-gem/ + primary language: Ruby + description: RubyGems gem package archive + path_patterns: '*.gem' +-------------------------------------------- +Package type: gem + datasource_id: gem_archive_extracted + documentation URL: https://web.archive.org/web/20220326093616/https://piotrmurach.com/articles/looking-inside-a-ruby-gem/ + primary language: Ruby + description: RubyGems gem package extracted archive + path_patterns: '*/metadata.gz-extract' +-------------------------------------------- +Package type: gem + datasource_id: gem_gemspec_installed_specifications + documentation URL: https://guides.rubygems.org/specification-reference/ + primary language: Ruby + description: RubyGems gemspec manifest - installed vendor/bundle/specifications layout + path_patterns: '*/specifications/*.gemspec' +-------------------------------------------- +Package type: gem + datasource_id: gemfile + documentation URL: https://bundler.io/man/gemfile.5.html + primary language: Ruby + description: RubyGems Bundler Gemfile + path_patterns: '*/Gemfile', '*/*.gemfile', '*/Gemfile-*' +-------------------------------------------- +Package type: gem + datasource_id: gemfile_extracted + documentation URL: https://bundler.io/man/gemfile.5.html + primary language: Ruby + description: RubyGems Bundler Gemfile - extracted layout + path_patterns: '*/data.gz-extract/Gemfile' +-------------------------------------------- +Package type: gem + datasource_id: gemfile_lock + documentation URL: https://bundler.io/man/gemfile.5.html + primary language: Ruby + description: RubyGems Bundler Gemfile.lock + path_patterns: '*/Gemfile.lock' +-------------------------------------------- +Package type: gem + datasource_id: gemfile_lock_extracted + documentation URL: https://bundler.io/man/gemfile.5.html + primary language: Ruby + description: RubyGems Bundler Gemfile.lock - extracted layout + path_patterns: '*/data.gz-extract/Gemfile.lock' +-------------------------------------------- +Package type: gem + datasource_id: gemspec + documentation URL: https://guides.rubygems.org/specification-reference/ + primary language: Ruby + description: RubyGems gemspec manifest + path_patterns: '*.gemspec' +-------------------------------------------- +Package type: gem + datasource_id: gemspec_extracted + documentation URL: https://guides.rubygems.org/specification-reference/ + primary language: Ruby + description: RubyGems gemspec manifest - extracted data layout + path_patterns: '*/data.gz-extract/*.gemspec' +-------------------------------------------- +Package type: golang + datasource_id: go_mod + documentation URL: https://go.dev/ref/mod + primary language: Go + description: Go modules file + path_patterns: '*/go.mod' +-------------------------------------------- +Package type: golang + datasource_id: go_sum + documentation URL: https://go.dev/ref/mod#go-sum-files + primary language: Go + description: Go module cheksums file + path_patterns: '*/go.sum' +-------------------------------------------- +Package type: golang + datasource_id: godeps + documentation URL: https://github.com/tools/godep + primary language: Go + description: Go Godeps + path_patterns: '*/Godeps.json' +-------------------------------------------- +Package type: haxe + datasource_id: haxelib_json + documentation URL: https://lib.haxe.org/documentation/creating-a-haxelib-package/ + primary language: Haxe + description: Haxe haxelib.json metadata file + path_patterns: '*/haxelib.json' +-------------------------------------------- +Package type: installshield + datasource_id: installshield_installer + documentation URL: https://www.revenera.com/install/products/installshield + primary language: None + description: InstallShield installer + path_patterns: '*.exe' +-------------------------------------------- +Package type: ios + datasource_id: ios_ipa + documentation URL: https://en.wikipedia.org/wiki/.ipa + primary language: Objective-C + description: iOS package archive + path_patterns: '*.ipa' +-------------------------------------------- +Package type: iso + datasource_id: iso_disk_image + documentation URL: https://en.wikipedia.org/wiki/ISO_9660 + primary language: None + description: ISO disk image + path_patterns: '*.iso', '*.udf', '*.img' +-------------------------------------------- +Package type: ivy + datasource_id: ant_ivy_xml + documentation URL: https://ant.apache.org/ivy/history/latest-milestone/ivyfile.html + primary language: Java + description: Ant IVY dependency file + path_patterns: '*/ivy.xml' +-------------------------------------------- +Package type: jar + datasource_id: java_jar_manifest + documentation URL: https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html + primary language: Java + description: Java JAR MANIFEST.MF + path_patterns: '*/META-INF/MANIFEST.MF' +-------------------------------------------- +Package type: jboss-service + datasource_id: jboss_sar + documentation URL: https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch02s01.html + primary language: Java + description: JBOSS service archive + path_patterns: '*.sar' +-------------------------------------------- +Package type: jboss-service + datasource_id: jboss_service_xml + documentation URL: https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch02s01.html + primary language: Java + description: JBOSS service.xml + path_patterns: '*/meta-inf/jboss-service.xml' +-------------------------------------------- +Package type: linux-distro + datasource_id: etc_os_release + documentation URL: https://www.freedesktop.org/software/systemd/man/os-release.html + primary language: None + description: Linux OS release metadata file + path_patterns: '*etc/os-release', '*usr/lib/os-release' +-------------------------------------------- +Package type: maven + datasource_id: build_gradle + documentation URL: None + primary language: None + description: Gradle build script + path_patterns: '*/build.gradle', 'build.gradle.kts' +-------------------------------------------- +Package type: maven + datasource_id: maven_pom + documentation URL: https://maven.apache.org/pom.html + primary language: Java + description: Apache Maven pom + path_patterns: '*.pom', '*pom.xml' +-------------------------------------------- +Package type: maven + datasource_id: maven_pom_properties + documentation URL: https://maven.apache.org/pom.html + primary language: Java + description: Apache Maven pom properties file + path_patterns: '*/pom.properties' +-------------------------------------------- +Package type: meteor + datasource_id: meteor_package + documentation URL: https://docs.meteor.com/api/packagejs.html + primary language: JavaScript + description: Meteor package.js + path_patterns: '*/package.js' +-------------------------------------------- +Package type: mozilla + datasource_id: mozilla_xpi + documentation URL: https://en.wikipedia.org/wiki/XPInstall + primary language: JavaScript + description: Mozilla XPI extension + path_patterns: '*.xpi' +-------------------------------------------- +Package type: msi + datasource_id: msi_installer + documentation URL: https://docs.microsoft.com/en-us/windows/win32/msi/windows-installer-portal + primary language: None + description: Microsoft MSI installer + path_patterns: '*.msi' +-------------------------------------------- +Package type: npm + datasource_id: npm_package_json + documentation URL: https://docs.npmjs.com/cli/v8/configuring-npm/package-json + primary language: JavaScript + description: npm package.json + path_patterns: '*/package.json' +-------------------------------------------- +Package type: npm + datasource_id: npm_package_lock_json + documentation URL: https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json + primary language: JavaScript + description: npm package-lock.json lockfile + path_patterns: '*/package-lock.json', '*/.package-lock.json' +-------------------------------------------- +Package type: npm + datasource_id: npm_shrinkwrap_json + documentation URL: https://docs.npmjs.com/cli/v8/configuring-npm/npm-shrinkwrap-json + primary language: JavaScript + description: npm shrinkwrap.json lockfile + path_patterns: '*/npm-shrinkwrap.json' +-------------------------------------------- +Package type: npm + datasource_id: yarn_lock_v1 + documentation URL: https://classic.yarnpkg.com/lang/en/docs/yarn-lock/ + primary language: JavaScript + description: yarn.lock lockfile v1 format + path_patterns: '*/yarn.lock' +-------------------------------------------- +Package type: npm + datasource_id: yarn_lock_v2 + documentation URL: https://classic.yarnpkg.com/lang/en/docs/yarn-lock/ + primary language: JavaScript + description: yarn.lock lockfile v2 format + path_patterns: '*/yarn.lock' +-------------------------------------------- +Package type: nsis + datasource_id: nsis_installer + documentation URL: https://nsis.sourceforge.io/Main_Page + primary language: None + description: NSIS installer + path_patterns: '*.exe' +-------------------------------------------- +Package type: nuget + datasource_id: nuget_nupkg + documentation URL: https://en.wikipedia.org/wiki/Open_Packaging_Conventions + primary language: None + description: NuGet nupkg package archive + path_patterns: '*.nupkg' +-------------------------------------------- +Package type: nuget + datasource_id: nuget_nupsec + documentation URL: https://docs.microsoft.com/en-us/nuget/reference/nuspec + primary language: None + description: NuGet nuspec package manifest + path_patterns: '*.nuspec' +-------------------------------------------- +Package type: opam + datasource_id: opam_file + documentation URL: https://opam.ocaml.org/doc/Manual.html#Common-file-format + primary language: Ocaml + description: Ocaml Opam file + path_patterns: '*opam' +-------------------------------------------- +Package type: pods + datasource_id: cocoapods_podfile + documentation URL: https://guides.cocoapods.org/using/the-podfile.html + primary language: Objective-C + description: Cocoapods Podfile + path_patterns: '*Podfile' +-------------------------------------------- +Package type: pods + datasource_id: cocoapods_podfile_lock + documentation URL: https://guides.cocoapods.org/using/the-podfile.html + primary language: Objective-C + description: Cocoapods Podfile.lock + path_patterns: '*Podfile.lock' +-------------------------------------------- +Package type: pods + datasource_id: cocoapods_podspec + documentation URL: https://guides.cocoapods.org/syntax/podspec.html + primary language: Objective-C + description: Cocoapods .podspec + path_patterns: '*.podspec' +-------------------------------------------- +Package type: pods + datasource_id: cocoapods_podspec_json + documentation URL: https://guides.cocoapods.org/syntax/podspec.html + primary language: Objective-C + description: Cocoapods .podspec.json + path_patterns: '*.podspec.json' +-------------------------------------------- +Package type: pubspec + datasource_id: pubspec_lock + documentation URL: https://web.archive.org/web/20220330081004/https://gpalma.pt/blog/what-is-the-pubspec-lock/ + primary language: dart + description: Dart pubspec lockfile + path_patterns: '*pubspec.lock' +-------------------------------------------- +Package type: pubspec + datasource_id: pubspec_yaml + documentation URL: https://dart.dev/tools/pub/pubspec + primary language: dart + description: Dart pubspec manifest + path_patterns: '*pubspec.yaml' +-------------------------------------------- +Package type: pypi + datasource_id: conda_yaml + documentation URL: https://docs.conda.io/ + primary language: Python + description: Conda yaml manifest + path_patterns: '*conda.yaml', '*conda.yml' +-------------------------------------------- +Package type: pypi + datasource_id: pip_requirements + documentation URL: https://pip.pypa.io/en/latest/reference/requirements-file-format/ + primary language: Python + description: pip requirements file + path_patterns: '*requirement*.txt', '*requirement*.pip', '*requirement*.in', '*requires.txt', '*requirements/*.txt', '*requirements/*.pip', '*requirements/*.in', '*reqs.txt' +-------------------------------------------- +Package type: pypi + datasource_id: pipfile + documentation URL: https://github.com/pypa/pipfile + primary language: Python + description: Pipfile + path_patterns: '*Pipfile' +-------------------------------------------- +Package type: pypi + datasource_id: pipfile_lock + documentation URL: https://github.com/pypa/pipfile + primary language: Python + description: Pipfile.lock + path_patterns: '*Pipfile.lock' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_editable_egg_pkginfo + documentation URL: https://peps.python.org/pep-0376/ + primary language: Python + description: PyPI editable local installation PKG-INFO + path_patterns: '*.egg-info/PKG-INFO' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_egg + documentation URL: https://web.archive.org/web/20210604075235/http://peak.telecommunity.com/DevCenter/PythonEggs + primary language: Python + description: PyPI egg + path_patterns: '*.egg' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_egg_pkginfo + documentation URL: https://peps.python.org/pep-0376/ + primary language: Python + description: PyPI extracted egg PKG-INFO + path_patterns: '*/EGG-INFO/PKG-INFO' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_pyproject_toml + documentation URL: https://peps.python.org/pep-0621/ + primary language: Python + description: Python pyproject.toml + path_patterns: '*pyproject.toml' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_sdist + documentation URL: https://peps.python.org/pep-0643/ + primary language: Python + description: Python source distribution + path_patterns: '*.tar.gz', '*.tar.bz2', '*.zip' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_sdist_pkginfo + documentation URL: https://peps.python.org/pep-0314/ + primary language: Python + description: PyPI extracted sdist PKG-INFO + path_patterns: '*/PKG-INFO' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_setup_cfg + documentation URL: https://peps.python.org/pep-0390/ + primary language: Python + description: Python setup.cfg + path_patterns: '*setup.cfg' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_setup_py + documentation URL: https://docs.python.org/3/distutils/setupscript.html + primary language: Python + description: Python setup.py + path_patterns: '*setup.py' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_wheel + documentation URL: https://peps.python.org/pep-0427/ + primary language: Python + description: PyPI wheel + path_patterns: '*.whl' +-------------------------------------------- +Package type: pypi + datasource_id: pypi_wheel_metadata + documentation URL: https://packaging.python.org/en/latest/specifications/core-metadata/ + primary language: Python + description: PyPI installed wheel METADATA + path_patterns: '*.dist-info/METADATA' +-------------------------------------------- +Package type: readme + datasource_id: readme + documentation URL: None + primary language: None + description: None + path_patterns: '*/README.android', '*/README.chromium', '*/README.facebook', '*/README.google', '*/README.thirdparty' +-------------------------------------------- +Package type: rpm + datasource_id: rpm_archive + documentation URL: https://en.wikipedia.org/wiki/RPM_Package_Manager + primary language: None + description: RPM package archive + path_patterns: '*.rpm', '*.src.rpm', '*.srpm', '*.mvl', '*.vip' +-------------------------------------------- +Package type: rpm + datasource_id: rpm_installed_database_bdb + documentation URL: https://man7.org/linux/man-pages/man8/rpmdb.8.html + primary language: None + description: RPM installed package BDB database + path_patterns: '*var/lib/rpm/Packages' +-------------------------------------------- +Package type: rpm + datasource_id: rpm_installed_database_ndb + documentation URL: https://fedoraproject.org/wiki/Changes/NewRpmDBFormat + primary language: None + description: RPM installed package NDB database + path_patterns: '*usr/lib/sysimage/rpm/Packages.db' +-------------------------------------------- +Package type: rpm + datasource_id: rpm_installed_database_sqlite + documentation URL: https://fedoraproject.org/wiki/Changes/Sqlite_Rpmdb + primary language: None + description: RPM installed package SQLite database + path_patterns: '*var/lib/rpm/rpmdb.sqlite' +-------------------------------------------- +Package type: rpm + datasource_id: rpm_spefile + documentation URL: https://en.wikipedia.org/wiki/RPM_Package_Manager + primary language: None + description: RPM specfile + path_patterns: '*.spec' +-------------------------------------------- +Package type: shar + datasource_id: shar_shell_archive + documentation URL: https://en.wikipedia.org/wiki/Shar + primary language: None + description: shell archive + path_patterns: '*.shar' +-------------------------------------------- +Package type: squashfs + datasource_id: squashfs_disk_image + documentation URL: https://en.wikipedia.org/wiki/SquashFS + primary language: None + description: Squashfs disk image + path_patterns: +-------------------------------------------- +Package type: war + datasource_id: java_war_archive + documentation URL: https://en.wikipedia.org/wiki/WAR_(file_format) + primary language: Java + description: Java Web Application Archive + path_patterns: '*.war' +-------------------------------------------- +Package type: war + datasource_id: java_war_web_xml + documentation URL: https://en.wikipedia.org/wiki/WAR_(file_format) + primary language: Java + description: Java WAR web/xml + path_patterns: '*/WEB-INF/web.xml' +-------------------------------------------- +Package type: windows-program + datasource_id: win_reg_installed_programs_docker_file_software + documentation URL: https://en.wikipedia.org/wiki/Windows_Registry + primary language: None + description: Windows Registry Installed Program - Docker SOFTWARE + path_patterns: '*/Files/Windows/System32/config/SOFTWARE' +-------------------------------------------- +Package type: windows-program + datasource_id: win_reg_installed_programs_docker_software_delta + documentation URL: https://en.wikipedia.org/wiki/Windows_Registry + primary language: None + description: Windows Registry Installed Program - Docker Software Delta + path_patterns: '*/Hives/Software_Delta' +-------------------------------------------- +Package type: windows-program + datasource_id: win_reg_installed_programs_docker_utility_software + documentation URL: https://en.wikipedia.org/wiki/Windows_Registry + primary language: None + description: Windows Registry Installed Program - Docker UtilityVM SOFTWARE + path_patterns: '*/UtilityVM/Files/Windows/System32/config/SOFTWARE' +-------------------------------------------- +Package type: windows-update + datasource_id: microsoft_update_manifest_mum + documentation URL: None + primary language: None + description: Microsoft Update Manifest .mum file + path_patterns: '*.mum' +-------------------------------------------- +Package type: winexe + datasource_id: windows_executable + documentation URL: https://en.wikipedia.org/wiki/Portable_Executable + primary language: None + description: Windows Portable Executable metadata + path_patterns: '*.exe', '*.dll', '*.mui', '*.mun', '*.com', '*.winmd', '*.sys', '*.tlb', '*.exe_*', '*.dll_*', '*.mui_*', '*.mun_*', '*.com_*', '*.winmd_*', '*.sys_*', '*.tlb_*', '*.ocx' diff --git a/tests/packagedcode/data/plugin/maven-package-expected.json b/tests/packagedcode/data/plugin/maven-package-expected.json index d94573911ba..8725358673d 100644 --- a/tests/packagedcode/data/plugin/maven-package-expected.json +++ b/tests/packagedcode/data/plugin/maven-package-expected.json @@ -29,9 +29,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging-api", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/commons-logging/commons-logging-api?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.camel/camel-jms", @@ -41,9 +42,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.camel/camel-jms", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.camel/camel-jms?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.activemq/activemq-core", @@ -53,9 +55,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.activemq/activemq-core", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.activemq/activemq-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.activemq/activemq-pool", @@ -65,9 +68,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.activemq/activemq-pool", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.activemq/activemq-pool?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.geronimo.specs/geronimo-annotation_1.0_spec", @@ -77,9 +81,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.geronimo.specs/geronimo-annotation_1.0_spec", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.geronimo.specs/geronimo-annotation_1.0_spec?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.activemq/activemq-core", @@ -89,9 +94,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.activemq/activemq-core", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.activemq/activemq-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.camel/camel-core", @@ -101,9 +107,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.camel/camel-core", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.camel/camel-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.camel/camel-spring", @@ -113,9 +120,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.camel/camel-spring", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.apache.camel/camel-spring?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-test", @@ -125,9 +133,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-test", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.springframework/spring-test?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit", @@ -137,9 +146,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/junit/junit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hamcrest/hamcrest-all", @@ -149,9 +159,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hamcrest/hamcrest-all", - "for_package": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "lockfile": "activemq-camel/activemq-camel-pom.xml" + "dependency_uid": "pkg:maven/org.hamcrest/hamcrest-all?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "activemq-camel/activemq-camel-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.ant/ant@1.7.0", @@ -161,9 +172,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.ant/ant@1.7.0", - "for_package": "pkg:maven/org.apache.ant/ant-jai@1.7.0", - "lockfile": "ant-jai-1.7.0/ant-jai-1.7.0.pom" + "dependency_uid": "pkg:maven/org.apache.ant/ant@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "ant-jai-1.7.0/ant-jai-1.7.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.media/jai-core@1.1.2_01", @@ -173,9 +185,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.media/jai-core@1.1.2_01", - "for_package": "pkg:maven/org.apache.ant/ant-jai@1.7.0", - "lockfile": "ant-jai-1.7.0/ant-jai-1.7.0.pom" + "dependency_uid": "pkg:maven/javax.media/jai-core@1.1.2_01?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "ant-jai-1.7.0/ant-jai-1.7.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jai/jai-codec@1.1.2.1", @@ -185,9 +198,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jai/jai-codec@1.1.2.1", - "for_package": "pkg:maven/org.apache.ant/ant-jai@1.7.0", - "lockfile": "ant-jai-1.7.0/ant-jai-1.7.0.pom" + "dependency_uid": "pkg:maven/jai/jai-codec@1.1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "ant-jai-1.7.0/ant-jai-1.7.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.ant/ant@1.7.0", @@ -197,9 +211,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.ant/ant@1.7.0", - "for_package": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", - "lockfile": "ant-jsch-1.7.0/ant-jsch-1.7.0.pom" + "dependency_uid": "pkg:maven/org.apache.ant/ant@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "ant-jsch-1.7.0/ant-jsch-1.7.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.jcraft/jsch@0.1.29", @@ -209,9 +224,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.jcraft/jsch@0.1.29", - "for_package": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", - "lockfile": "ant-jsch-1.7.0/ant-jsch-1.7.0.pom" + "dependency_uid": "pkg:maven/com.jcraft/jsch@0.1.29?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "ant-jsch-1.7.0/ant-jsch-1.7.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/servletapi/servletapi@2.3", @@ -221,9 +237,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/servletapi/servletapi@2.3", - "for_package": "pkg:maven/commons-fileupload/commons-fileupload@1.0", - "lockfile": "commons-fileupload-1.0/commons-fileupload-1.0.pom" + "dependency_uid": "pkg:maven/servletapi/servletapi@2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-fileupload-1.0/commons-fileupload-1.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -233,9 +250,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/commons-fileupload/commons-fileupload@1.0", - "lockfile": "commons-fileupload-1.0/commons-fileupload-1.0.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-fileupload-1.0/commons-fileupload-1.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0", @@ -245,9 +263,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-digester/commons-digester@1.6", @@ -257,9 +276,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-digester/commons-digester@1.6", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/commons-digester/commons-digester@1.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-logging/commons-logging@1.0.4", @@ -269,9 +289,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging@1.0.4", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/commons-logging/commons-logging@1.0.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/oro/oro@2.0.8", @@ -281,9 +302,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/oro/oro@2.0.8", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/oro/oro@2.0.8?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/xml-apis/xml-apis@2.0.2", @@ -293,9 +315,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/xml-apis/xml-apis@2.0.2", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/xml-apis/xml-apis@2.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -305,9 +328,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/commons-validator/commons-validator@1.2.0", - "lockfile": "commons-validator-1.2.0/commons-validator-1.2.0.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "commons-validator-1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/log4j/log4j@1.2.8", @@ -317,9 +341,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/log4j/log4j@1.2.8", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/log4j/log4j@1.2.8?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/servletapi/servletapi@2.3", @@ -329,9 +354,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/servletapi/servletapi@2.3", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/servletapi/servletapi@2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/struts/struts@1.1", @@ -341,9 +367,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/struts/struts@1.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/struts/struts@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-configuration/commons-configuration@1.1", @@ -353,9 +380,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-configuration/commons-configuration@1.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-configuration/commons-configuration@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-collections/commons-collections@3.1", @@ -365,9 +393,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-collections/commons-collections@3.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-collections/commons-collections@3.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-lang/commons-lang@2.0", @@ -377,9 +406,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-lang/commons-lang@2.0", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-lang/commons-lang@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/dom4j/dom4j@1.4", @@ -389,9 +419,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/dom4j/dom4j@1.4", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/dom4j/dom4j@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-logging/commons-logging@1.0.4", @@ -401,9 +432,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging@1.0.4", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-logging/commons-logging@1.0.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-digester/commons-digester@1.6", @@ -413,9 +445,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-digester/commons-digester@1.6", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-digester/commons-digester@1.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/xerces/xerces@2.2.1", @@ -425,9 +458,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/xerces/xerces@2.2.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/xerces/xerces@2.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/xml-apis/xml-apis@2.0.2", @@ -437,9 +471,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/xml-apis/xml-apis@2.0.2", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/xml-apis/xml-apis@2.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/xdoclet/xdoclet@1.2.1", @@ -449,9 +484,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/xdoclet/xdoclet@1.2.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/xdoclet/xdoclet@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -461,9 +497,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-beanutils/commons-beanutils-core@1.7.0", @@ -473,9 +510,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-beanutils/commons-beanutils-core@1.7.0", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-beanutils/commons-beanutils-core@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-beanutils/commons-beanutils-bean-collections@1.7.0", @@ -485,9 +523,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-beanutils/commons-beanutils-bean-collections@1.7.0", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/commons-beanutils/commons-beanutils-bean-collections@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/xdoclet/xdoclet-web-module@1.2.1", @@ -497,9 +536,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/xdoclet/xdoclet-web-module@1.2.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/xdoclet/xdoclet-web-module@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/mx4j/mx4j-jmx@2.1.1", @@ -509,9 +549,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/mx4j/mx4j-jmx@2.1.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/mx4j/mx4j-jmx@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/mx4j/mx4j-impl@2.1.1", @@ -521,9 +562,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/mx4j/mx4j-impl@2.1.1", - "for_package": "pkg:maven/easyconf/easyconf@0.9.0", - "lockfile": "easyconf-0.9.0/easyconf-0.9.0.pom" + "dependency_uid": "pkg:maven/mx4j/mx4j-impl@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "easyconf-0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven/maven-artifact@2.0.4", @@ -533,9 +575,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven/maven-artifact@2.0.4", - "for_package": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "lockfile": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" + "dependency_uid": "pkg:maven/org.apache.maven/maven-artifact@2.0.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4", @@ -545,9 +588,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4", - "for_package": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "lockfile": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" + "dependency_uid": "pkg:maven/org.apache.maven.reporting/maven-reporting-impl@2.0.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4", @@ -557,9 +601,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4", - "for_package": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "lockfile": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" + "dependency_uid": "pkg:maven/org.apache.maven.reporting/maven-reporting-api@2.0.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8", @@ -569,9 +614,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8", - "for_package": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "lockfile": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" + "dependency_uid": "pkg:maven/org.apache.maven.doxia/doxia-core@1.0-alpha-8?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/net.sourceforge.findbugs/findbugs@1.2.0", @@ -581,9 +627,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/net.sourceforge.findbugs/findbugs@1.2.0", - "for_package": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "lockfile": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" + "dependency_uid": "pkg:maven/net.sourceforge.findbugs/findbugs@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/info.flex-mojos/testing-support", @@ -593,9 +640,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/info.flex-mojos/testing-support", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/info.flex-mojos/testing-support?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flexunit/flexunit", @@ -605,9 +653,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flexunit/flexunit", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.flexunit/flexunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flexunit/flexunit-optional", @@ -617,9 +666,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flexunit/flexunit-optional", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.flexunit/flexunit-optional?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.ac.samples.lcds/blazeds_service_config@1.0-SNAPSHOT", @@ -629,9 +679,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.ac.samples.lcds/blazeds_service_config@1.0-SNAPSHOT", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.ac.samples.lcds/blazeds_service_config@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_remoted_objects@1.0-SNAPSHOT", @@ -641,9 +692,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.ac.samples.lcds/flex_remoted_objects@1.0-SNAPSHOT", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_remoted_objects@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flex/compiler", @@ -653,9 +705,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flex/compiler", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.flex/compiler?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flex.framework/flex-framework", @@ -665,9 +718,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flex.framework/flex-framework", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.flex.framework/flex-framework?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.cairngorm/cairngorm", @@ -677,9 +731,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.cairngorm/cairngorm", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.cairngorm/cairngorm?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.cairngorm/cairngorm-enterprise", @@ -689,9 +744,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.cairngorm/cairngorm-enterprise", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.cairngorm/cairngorm-enterprise?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.lcds/fds", @@ -701,9 +757,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.lcds/fds", - "for_package": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "lockfile": "fna2_pom/fna2_pom.xml" + "dependency_uid": "pkg:maven/com.adobe.lcds/fds?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna2_pom/fna2_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_blazeds_service_config@1.0", @@ -713,9 +770,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.ac.samples.bash/bash_blazeds_service_config@1.0", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_blazeds_service_config@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_remoted_objects@1.0", @@ -725,9 +783,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_remoted_objects@1.0", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_remoted_objects@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flex/compiler", @@ -737,9 +796,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flex/compiler", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.flex/compiler?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flex.framework/flex-framework", @@ -749,9 +809,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flex.framework/flex-framework", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.flex.framework/flex-framework?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.cairngorm/cairngorm", @@ -761,9 +822,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.cairngorm/cairngorm", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.cairngorm/cairngorm?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.adobe.flexunit/flexunit", @@ -773,9 +835,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.adobe.flexunit/flexunit", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/com.adobe.flexunit/flexunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/info.flex-mojos/testing-support", @@ -785,9 +848,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/info.flex-mojos/testing-support", - "for_package": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "lockfile": "fna_pom_project/fna_pom_project.xml" + "dependency_uid": "pkg:maven/info.flex-mojos/testing-support?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "fna_pom_project/fna_pom_project.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.myco.foo/common-dependencies@1.1", @@ -797,9 +861,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.myco.foo/common-dependencies@1.1", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/com.myco.foo/common-dependencies@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE", @@ -809,9 +874,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5", @@ -821,9 +887,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar@1.0", @@ -833,9 +900,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.myco.foo.bar.baz/baz-bar@1.0", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.myco.foo/common-dependencies@1.1", @@ -845,9 +913,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.myco.foo/common-dependencies@1.1", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/com.myco.foo/common-dependencies@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE", @@ -857,9 +926,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/org.springframework.boot/spring-boot-dependencies@1.4.2.RELEASE?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework.boot/spring-boot-starter@1.4.2.RELEASE", @@ -869,9 +939,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework.boot/spring-boot-starter@1.4.2.RELEASE", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/org.springframework.boot/spring-boot-starter@1.4.2.RELEASE?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5", @@ -881,9 +952,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5", - "for_package": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "lockfile": "foo-pom/foo-pom.xml" + "dependency_uid": "pkg:maven/org.springframework.cloud/spring-cloud-dependencies@Camden.SR5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "foo-pom/foo-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.axis/axis@1.4", @@ -893,9 +965,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.axis/axis@1.4", - "for_package": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "lockfile": "gero_pom/gero_pom.xml" + "dependency_uid": "pkg:maven/org.apache.axis/axis@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "gero_pom/gero_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.idega.block.platform/com.idega.core", @@ -905,9 +978,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.idega.block.platform/com.idega.core", - "for_package": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "lockfile": "idega_pom/idega_pom.xml" + "dependency_uid": "pkg:maven/com.idega.block.platform/com.idega.core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "idega_pom/idega_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.idega.block.platform/com.idega.block.media", @@ -917,9 +991,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.idega.block.platform/com.idega.block.media", - "for_package": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "lockfile": "idega_pom/idega_pom.xml" + "dependency_uid": "pkg:maven/com.idega.block.platform/com.idega.block.media?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "idega_pom/idega_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/itextpdf/itext-paulo", @@ -929,9 +1004,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/itextpdf/itext-paulo", - "for_package": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "lockfile": "idega_pom/idega_pom.xml" + "dependency_uid": "pkg:maven/itextpdf/itext-paulo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "idega_pom/idega_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/itext/itext-xml", @@ -941,9 +1017,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:maven/itext/itext-xml", - "for_package": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "lockfile": "idega_pom/idega_pom.xml" + "dependency_uid": "pkg:maven/itext/itext-xml?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "idega_pom/idega_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/relaxngDatatype/relaxngDatatype@20020414", @@ -953,9 +1030,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/relaxngDatatype/relaxngDatatype@20020414", - "for_package": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "lockfile": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom" + "dependency_uid": "pkg:maven/relaxngDatatype/relaxngDatatype@20020414?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.sun.xml.bind/jaxb-impl@2.1.11", @@ -965,9 +1043,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.sun.xml.bind/jaxb-impl@2.1.11", - "for_package": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "lockfile": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom" + "dependency_uid": "pkg:maven/com.sun.xml.bind/jaxb-impl@2.1.11?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.sun.xml.bind/jaxb-xjc@2.1.11", @@ -977,9 +1056,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.sun.xml.bind/jaxb-xjc@2.1.11", - "for_package": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "lockfile": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom" + "dependency_uid": "pkg:maven/com.sun.xml.bind/jaxb-xjc@2.1.11?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.sun.xsom/xsom@20081112", @@ -989,9 +1069,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.sun.xsom/xsom@20081112", - "for_package": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "lockfile": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom" + "dependency_uid": "pkg:maven/com.sun.xsom/xsom@20081112?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "jrecordbind-2.3.4/jrecordbind-2.3.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.mail/mail@1.4", @@ -1001,9 +1082,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.mail/mail@1.4", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/javax.mail/mail@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.jms/jms@1.1", @@ -1013,9 +1095,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.jms/jms@1.1", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/javax.jms/jms@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.sun.jdmk/jmxtools@1.2.1", @@ -1025,9 +1108,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.sun.jdmk/jmxtools@1.2.1", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/com.sun.jdmk/jmxtools@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.sun.jmx/jmxri@1.2.1", @@ -1037,9 +1121,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.sun.jmx/jmxri@1.2.1", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/com.sun.jmx/jmxri@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/oro/oro@2.0.8", @@ -1049,9 +1134,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/oro/oro@2.0.8", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/oro/oro@2.0.8?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -1061,9 +1147,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/log4j/log4j@1.2.15", - "lockfile": "log4j/log4j-pom.xml" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "log4j/log4j-pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/ch.qos.logback/logback-core", @@ -1073,9 +1160,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/ch.qos.logback/logback-core", - "for_package": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "lockfile": "logback-access/logback-access.pom" + "dependency_uid": "pkg:maven/ch.qos.logback/logback-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "logback-access/logback-access.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/tomcat/catalina", @@ -1085,9 +1173,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/tomcat/catalina", - "for_package": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "lockfile": "logback-access/logback-access.pom" + "dependency_uid": "pkg:maven/tomcat/catalina?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "logback-access/logback-access.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.mortbay.jetty/jetty", @@ -1097,9 +1186,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.mortbay.jetty/jetty", - "for_package": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "lockfile": "logback-access/logback-access.pom" + "dependency_uid": "pkg:maven/org.mortbay.jetty/jetty?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "logback-access/logback-access.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.caucho/resin", @@ -1109,9 +1199,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.caucho/resin", - "for_package": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "lockfile": "logback-access/logback-access.pom" + "dependency_uid": "pkg:maven/com.caucho/resin?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "logback-access/logback-access.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.mortbay.jetty/servlet-api-2.5", @@ -1121,9 +1212,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.mortbay.jetty/servlet-api-2.5", - "for_package": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "lockfile": "logback-access/logback-access.pom" + "dependency_uid": "pkg:maven/org.mortbay.jetty/servlet-api-2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "logback-access/logback-access.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7", @@ -1133,9 +1225,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7", - "for_package": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "lockfile": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "dependency_uid": "pkg:maven/org.codehaus.plexus/plexus-container-default@1.0-alpha-7?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2", @@ -1145,9 +1238,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/classworlds/classworlds@1.1-alpha-2", - "for_package": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "lockfile": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "dependency_uid": "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/plexus/plexus-utils@1.0.2", @@ -1157,9 +1251,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/plexus/plexus-utils@1.0.2", - "for_package": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "lockfile": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "dependency_uid": "pkg:maven/plexus/plexus-utils@1.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -1169,9 +1264,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "lockfile": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.axis/axis@1.4", @@ -1181,9 +1277,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.axis/axis@1.4", - "for_package": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "lockfile": "proper-pom/proper_pom.xml" + "dependency_uid": "pkg:maven/org.apache.axis/axis@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "proper-pom/proper_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.ant/ant@1.7.0", @@ -1193,9 +1290,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.ant/ant@1.7.0", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/org.apache.ant/ant@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-lang/commons-lang@2.0", @@ -1205,9 +1303,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-lang/commons-lang@2.0", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/commons-lang/commons-lang@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-digester/commons-digester@2.0", @@ -1217,9 +1316,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-digester/commons-digester@2.0", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/commons-digester/commons-digester@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/dom4j/dom4j@1.6.1", @@ -1229,9 +1329,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/dom4j/dom4j@1.6.1", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/dom4j/dom4j@1.6.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-annotations@3.4.0.GA", @@ -1241,9 +1342,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-annotations@3.4.0.GA", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-annotations@3.4.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.4.0.GA", @@ -1253,9 +1355,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.4.0.GA", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.4.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/ejb3-persistence@3.3.2.Beta1", @@ -1265,9 +1368,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/ejb3-persistence@3.3.2.Beta1", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/ejb3-persistence@3.3.2.Beta1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.slf4j/slf4j-jcl@1.4.2", @@ -1277,9 +1381,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.slf4j/slf4j-jcl@1.4.2", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/org.slf4j/slf4j-jcl@1.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/postgresql/postgresql@8.3-603.jdbc4", @@ -1289,9 +1394,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/postgresql/postgresql@8.3-603.jdbc4", - "for_package": "pkg:maven/org.modeler/modeler@0.1", - "lockfile": "rel_pom/rel_pom.xml" + "dependency_uid": "pkg:maven/postgresql/postgresql@8.3-603.jdbc4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "rel_pom/rel_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam@2.2.0.GA", @@ -1301,9 +1407,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-ioc@2.2.0.GA", @@ -1313,9 +1420,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-ioc@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-ioc@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-mail@2.2.0.GA", @@ -1325,9 +1433,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-mail@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-mail@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-pdf@2.2.0.GA", @@ -1337,9 +1446,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-pdf@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-pdf@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-remoting@2.2.0.GA", @@ -1349,9 +1459,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-remoting@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-remoting@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-resteasy@2.2.0.GA", @@ -1361,9 +1472,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-resteasy@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-resteasy@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-ui@2.2.0.GA", @@ -1373,9 +1485,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-ui@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-ui@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-debug@2.2.0.GA", @@ -1385,9 +1498,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-debug@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-debug@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-excel@2.2.0.GA", @@ -1397,9 +1511,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-excel@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-excel@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.seam/jboss-seam-jul@2.2.0.GA", @@ -1409,9 +1524,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.seam/jboss-seam-jul@2.2.0.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.seam/jboss-seam-jul@2.2.0.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.richfaces.framework/richfaces-api@3.3.1.GA", @@ -1421,9 +1537,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.richfaces.framework/richfaces-api@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.richfaces.framework/richfaces-api@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.richfaces.framework/richfaces-impl@3.3.1.GA", @@ -1433,9 +1550,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.richfaces.framework/richfaces-impl@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.richfaces.framework/richfaces-impl@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.richfaces.ui/richfaces-ui@3.3.1.GA", @@ -1445,9 +1563,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.richfaces.ui/richfaces-ui@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.richfaces.ui/richfaces-ui@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jbpm/jbpm-jpdl@3.2.2", @@ -1457,9 +1576,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jbpm/jbpm-jpdl@3.2.2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jbpm/jbpm-jpdl@3.2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jboss/jboss-cache@1.4.1.SP9", @@ -1469,9 +1589,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jboss/jboss-cache@1.4.1.SP9", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/jboss/jboss-cache@1.4.1.SP9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.resteasy/resteasy-jaxrs@1.1-RC2", @@ -1481,9 +1602,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.resteasy/resteasy-jaxrs@1.1-RC2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.resteasy/resteasy-jaxrs@1.1-RC2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.resteasy/resteasy-jaxb-provider@1.1-RC2", @@ -1493,9 +1615,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.resteasy/resteasy-jaxb-provider@1.1-RC2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.resteasy/resteasy-jaxb-provider@1.1-RC2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-core@3.3.1.GA", @@ -1505,9 +1628,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-core@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-core@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-search@3.1.1.GA", @@ -1517,9 +1641,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-search@3.1.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-search@3.1.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.transaction/jta@1.1", @@ -1529,9 +1654,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.transaction/jta@1.1", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/javax.transaction/jta@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.codehaus.groovy/groovy-all@1.6.3", @@ -1541,9 +1667,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.codehaus.groovy/groovy-all@1.6.3", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.codehaus.groovy/groovy-all@1.6.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.drools/drools-core@5.0.1", @@ -1553,9 +1680,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.drools/drools-core@5.0.1", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.drools/drools-core@5.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.jboss.el/jboss-el@1.0_02.CR4", @@ -1565,9 +1693,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.jboss.el/jboss-el@1.0_02.CR4", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.jboss.el/jboss-el@1.0_02.CR4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.tuckey/urlrewritefilter@3.1.0", @@ -1577,9 +1706,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.tuckey/urlrewritefilter@3.1.0", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.tuckey/urlrewritefilter@3.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.richfaces.samples/glassX@3.3.1.GA", @@ -1589,9 +1719,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.richfaces.samples/glassX@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.richfaces.samples/glassX@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.richfaces.samples/darkX@3.3.1.GA", @@ -1601,9 +1732,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.richfaces.samples/darkX@3.3.1.GA", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.richfaces.samples/darkX@3.3.1.GA?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.drools/drools-api@5.0.1", @@ -1613,9 +1745,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.drools/drools-api@5.0.1", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.drools/drools-api@5.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-commons-annotations@3.3.0.ga", @@ -1625,9 +1758,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-commons-annotations@3.3.0.ga", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-commons-annotations@3.3.0.ga?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.antlr/antlr@3.2", @@ -1637,9 +1771,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.antlr/antlr@3.2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.antlr/antlr@3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.antlr/antlr-runtime@3.2", @@ -1649,9 +1784,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.antlr/antlr-runtime@3.2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.antlr/antlr-runtime@3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-digester/commons-digester@1.8.1", @@ -1661,9 +1797,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-digester/commons-digester@1.8.1", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/commons-digester/commons-digester@1.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-lang/commons-lang@2.3", @@ -1673,9 +1810,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-lang/commons-lang@2.3", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/commons-lang/commons-lang@2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.h2database/h2@1.1.118", @@ -1685,9 +1823,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.h2database/h2@1.1.118", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/com.h2database/h2@1.1.118?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/mysql/mysql-connector-java@5.1.10", @@ -1697,9 +1836,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/mysql/mysql-connector-java@5.1.10", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/mysql/mysql-connector-java@5.1.10?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.openejb/openejb-core@3.1.2", @@ -1709,9 +1849,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.openejb/openejb-core@3.1.2", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.apache.openejb/openejb-core@3.1.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@4.7", @@ -1721,9 +1862,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@4.7", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/junit/junit@4.7?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.testng/testng@5.9", @@ -1733,9 +1875,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.testng/testng@5.9", - "for_package": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "lockfile": "sea_pom/sea_pom.xml" + "dependency_uid": "pkg:maven/org.testng/testng@5.9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "sea_pom/sea_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -1745,9 +1888,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/org.apache.geronimo.specs/specs@1.3", - "lockfile": "specs-1.3/specs-1.3.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "specs-1.3/specs-1.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/aopalliance/aopalliance@1.0", @@ -1757,9 +1901,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/aopalliance/aopalliance@1.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/asm/asm@2.2.3", @@ -1769,9 +1914,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/asm/asm@2.2.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/asm/asm@2.2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/asm/asm-commons@2.2.3", @@ -1781,9 +1927,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/asm/asm-commons@2.2.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/asm/asm-commons@2.2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/asm/asm-util@2.2.3", @@ -1793,9 +1940,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/asm/asm-util@2.2.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/asm/asm-util@2.2.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/aspectj/aspectjrt@1.5.4", @@ -1805,9 +1953,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/aspectj/aspectjrt@1.5.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/aspectj/aspectjrt@1.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/aspectj/aspectjweaver@1.5.4", @@ -1817,9 +1966,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/aspectj/aspectjweaver@1.5.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/aspectj/aspectjweaver@1.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/backport-util-concurrent/backport-util-concurrent@3.0", @@ -1829,9 +1979,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/backport-util-concurrent/backport-util-concurrent@3.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/backport-util-concurrent/backport-util-concurrent@3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/c3p0/c3p0@0.9.1.2", @@ -1841,9 +1992,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/c3p0/c3p0@0.9.1.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/c3p0/c3p0@0.9.1.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/cglib/cglib-nodep@2.1_3", @@ -1853,9 +2005,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/cglib/cglib-nodep@2.1_3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/cglib/cglib-nodep@2.1_3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-attributes/commons-attributes-api@2.2", @@ -1865,9 +2018,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-attributes/commons-attributes-api@2.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-attributes/commons-attributes-api@2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2", @@ -1877,9 +2031,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0", @@ -1889,9 +2044,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-beanutils/commons-beanutils@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-collections/commons-collections@3.2", @@ -1901,9 +2057,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-collections/commons-collections@3.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-collections/commons-collections@3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-dbcp/commons-dbcp@1.2.2", @@ -1913,9 +2070,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-dbcp/commons-dbcp@1.2.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-dbcp/commons-dbcp@1.2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.2", @@ -1925,9 +2083,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-fileupload/commons-fileupload@1.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-fileupload/commons-fileupload@1.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-httpclient/commons-httpclient@3.1", @@ -1937,9 +2096,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-httpclient/commons-httpclient@3.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-httpclient/commons-httpclient@3.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-logging/commons-logging@1.1.1", @@ -1949,9 +2109,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging@1.1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-logging/commons-logging@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-pool/commons-pool@1.3", @@ -1961,9 +2122,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-pool/commons-pool@1.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/commons-pool/commons-pool@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.bea.wlplatform/commonj-twm@1.1", @@ -1973,9 +2135,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.bea.wlplatform/commonj-twm@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.bea.wlplatform/commonj-twm@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.experlog/xapool@1.5.0", @@ -1985,9 +2148,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.experlog/xapool@1.5.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.experlog/xapool@1.5.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0.677", @@ -1997,9 +2161,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0.677", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0.677?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.jamonapi/jamon@2.4", @@ -2009,9 +2174,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.jamonapi/jamon@2.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.jamonapi/jamon@2.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.lowagie/itext@2.0.7", @@ -2021,9 +2187,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.lowagie/itext@2.0.7", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.lowagie/itext@2.0.7?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.oracle.toplink/toplink@10.1.3", @@ -2033,9 +2200,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.oracle.toplink/toplink@10.1.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.oracle.toplink/toplink@10.1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.oracle/toplink-essentials@2.41", @@ -2045,9 +2213,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.oracle/toplink-essentials@2.41", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.oracle/toplink-essentials@2.41?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.oracle/oc4j@1.0", @@ -2057,9 +2226,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.oracle/oc4j@1.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/com.oracle/oc4j@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/freemarker/freemarker@2.3.12", @@ -2069,9 +2239,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/freemarker/freemarker@2.3.12", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/freemarker/freemarker@2.3.12?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/groovy/groovy@1.5.5", @@ -2081,9 +2252,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/groovy/groovy@1.5.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/groovy/groovy@1.5.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/hessian/hessian@3.1.3", @@ -2093,9 +2265,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/hessian/hessian@3.1.3", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/hessian/hessian@3.1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jasperreports/jasperreports@2.0.5", @@ -2105,9 +2278,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jasperreports/jasperreports@2.0.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/jasperreports/jasperreports@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jexcelapi/jxl@2.6.6", @@ -2117,9 +2291,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jexcelapi/jxl@2.6.6", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/jexcelapi/jxl@2.6.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jotm/jotm@2.0.10", @@ -2129,9 +2304,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jotm/jotm@2.0.10", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/jotm/jotm@2.0.10?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jruby/jruby-bin@1.0.1", @@ -2141,9 +2317,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jruby/jruby-bin@1.0.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/jruby/jruby-bin@1.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -2153,9 +2330,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/log4j/log4j@1.2.15", @@ -2165,9 +2343,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/log4j/log4j@1.2.15", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/net.sf.ehcache/ehcache@1.4.1", @@ -2177,9 +2356,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/net.sf.ehcache/ehcache@1.4.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/net.sf.ehcache/ehcache@1.4.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.axis/axis@1.4", @@ -2189,9 +2369,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.axis/axis@1.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.apache.axis/axis@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-api@2.0.5", @@ -2201,9 +2382,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-api@2.0.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-api@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-core@2.0.5", @@ -2213,9 +2395,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-core@2.0.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-core@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5", @@ -2225,9 +2408,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.beanshell/bsh@2.0b4", @@ -2237,9 +2421,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.beanshell/bsh@2.0b4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.beanshell/bsh@2.0b4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate@3.2.6.ga", @@ -2249,9 +2434,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate@3.2.6.ga", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.hibernate/hibernate@3.2.6.ga?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.ga", @@ -2261,9 +2447,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.ga", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.2.ga?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/poi/poi@3.0.1", @@ -2273,9 +2460,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/poi/poi@3.0.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/poi/poi@3.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/opensymphony/quartz-all@1.6.0", @@ -2285,9 +2473,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/opensymphony/quartz-all@1.6.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/opensymphony/quartz-all@1.6.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/struts/struts@1.2.9", @@ -2297,9 +2486,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/struts/struts@1.2.9", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/struts/struts@1.2.9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/taglibs/standard@1.1.2", @@ -2309,9 +2499,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/taglibs/standard@1.1.2", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/taglibs/standard@1.1.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/tomcat/catalina@5.5.23", @@ -2321,9 +2512,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/tomcat/catalina@5.5.23", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/tomcat/catalina@5.5.23?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity/velocity@1.5", @@ -2333,9 +2525,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity/velocity@1.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/velocity/velocity@1.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity-tools/velocity-tools-generic@1.4", @@ -2345,9 +2538,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity-tools/velocity-tools-generic@1.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/velocity-tools/velocity-tools-generic@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity-tools/velocity-tools-view@1.4", @@ -2357,9 +2551,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity-tools/velocity-tools-view@1.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/velocity-tools/velocity-tools-view@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.activation/activation@1.1", @@ -2369,9 +2564,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.activation/activation@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.activation/activation@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.ejb/ejb@3.0", @@ -2381,9 +2577,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.ejb/ejb@3.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.ejb/ejb@3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.faces/jsf-api@1.1", @@ -2393,9 +2590,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.faces/jsf-api@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.faces/jsf-api@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.jdo/jdo2-api@2.0", @@ -2405,9 +2603,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.jdo/jdo2-api@2.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.jdo/jdo2-api@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.jms/jms@1.1", @@ -2417,9 +2616,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.jms/jms@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.jms/jms@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.mail/mail@1.4", @@ -2429,9 +2629,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.mail/mail@1.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.mail/mail@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.persistence/persistence-api@1.0", @@ -2441,9 +2642,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.persistence/persistence-api@1.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.persistence/persistence-api@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.portlet/portlet-api@1.0", @@ -2453,9 +2655,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.portlet/portlet-api@1.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.portlet/portlet-api@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.resource/connector-api@1.5", @@ -2465,9 +2668,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.resource/connector-api@1.5", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.resource/connector-api@1.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/jsp-api@2.0", @@ -2477,9 +2681,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/jsp-api@2.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.servlet/jsp-api@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/jstl@1.1.0", @@ -2489,9 +2694,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/jstl@1.1.0", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.servlet/jstl@1.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/servlet-api@2.4", @@ -2501,9 +2707,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/servlet-api@2.4", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.servlet/servlet-api@2.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.transaction/jta@1.1", @@ -2513,9 +2720,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.transaction/jta@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.transaction/jta@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.xml/jaxrpc-api@1.1", @@ -2525,9 +2733,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.xml/jaxrpc-api@1.1", - "for_package": "pkg:maven/org.springframework/spring@2.5.4", - "lockfile": "spring-2.5.4/spring-2.5.4.pom" + "dependency_uid": "pkg:maven/javax.xml/jaxrpc-api@1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/aopalliance/aopalliance@1.0", @@ -2537,9 +2746,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/aopalliance/aopalliance@1.0", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-logging/commons-logging@1.1.1", @@ -2549,9 +2759,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging@1.1.1", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/commons-logging/commons-logging@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.oracle/toplink-essentials@2.41", @@ -2561,9 +2772,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.oracle/toplink-essentials@2.41", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/com.oracle/toplink-essentials@2.41?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.oracle.toplink/toplink@10.1.3", @@ -2573,9 +2785,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.oracle.toplink/toplink@10.1.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/com.oracle.toplink/toplink@10.1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0", @@ -2585,9 +2798,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.apache.ibatis/ibatis-sqlmap@2.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate@3.2.6.ga", @@ -2597,9 +2811,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate@3.2.6.ga", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.hibernate/hibernate@3.2.6.ga?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.1.ga", @@ -2609,9 +2824,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.1.ga", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.hibernate/hibernate-entitymanager@3.3.1.ga?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-aop@2.5.3", @@ -2621,9 +2837,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-aop@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-aop@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-beans@2.5.3", @@ -2633,9 +2850,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-beans@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-beans@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-context@2.5.3", @@ -2645,9 +2863,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-context@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-context@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-core@2.5.3", @@ -2657,9 +2876,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-core@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-core@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-jdbc@2.5.3", @@ -2669,9 +2889,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-jdbc@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-jdbc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-tx@2.5.3", @@ -2681,9 +2902,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-tx@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-tx@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-web@2.5.3", @@ -2693,9 +2915,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-web@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-web@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.jdo/jdo2-api@2.0", @@ -2705,9 +2928,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.jdo/jdo2-api@2.0", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/javax.jdo/jdo2-api@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.persistence/persistence-api@1.0", @@ -2717,9 +2941,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.persistence/persistence-api@1.0", - "for_package": "pkg:maven/org.springframework/spring-orm@2.5.3", - "lockfile": "spring-orm-2.5.3/spring-orm-2.5.3.pom" + "dependency_uid": "pkg:maven/javax.persistence/persistence-api@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-orm-2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-attributes/commons-attributes-api@2.2", @@ -2729,9 +2954,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-attributes/commons-attributes-api@2.2", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/commons-attributes/commons-attributes-api@2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2", @@ -2741,9 +2967,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/commons-attributes/commons-attributes-compiler@2.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/commons-logging/commons-logging@1.1.1", @@ -2753,9 +2980,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/commons-logging/commons-logging@1.1.1", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/commons-logging/commons-logging@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.lowagie/itext@2.0.7", @@ -2765,9 +2993,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.lowagie/itext@2.0.7", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/com.lowagie/itext@2.0.7?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/freemarker/freemarker@2.3.12", @@ -2777,9 +3006,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/freemarker/freemarker@2.3.12", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/freemarker/freemarker@2.3.12?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jasperreports/jasperreports@2.0.2", @@ -2789,9 +3019,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jasperreports/jasperreports@2.0.2", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/jasperreports/jasperreports@2.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/jexcelapi/jxl@2.6.6", @@ -2801,9 +3032,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/jexcelapi/jxl@2.6.6", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/jexcelapi/jxl@2.6.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-api@2.0.5", @@ -2813,9 +3045,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-api@2.0.5", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-api@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-core@2.0.5", @@ -2825,9 +3058,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-core@2.0.5", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-core@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5", @@ -2837,9 +3071,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.apache.tiles/tiles-jsp@2.0.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/poi/poi@3.0.1", @@ -2849,9 +3084,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/poi/poi@3.0.1", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/poi/poi@3.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity/velocity@1.5", @@ -2861,9 +3097,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity/velocity@1.5", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/velocity/velocity@1.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity-tools/velocity-tools-generic@1.4", @@ -2873,9 +3110,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity-tools/velocity-tools-generic@1.4", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/velocity-tools/velocity-tools-generic@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/velocity-tools/velocity-tools-view@1.4", @@ -2885,9 +3123,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/velocity-tools/velocity-tools-view@1.4", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/velocity-tools/velocity-tools-view@1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-beans@2.5.3", @@ -2897,9 +3136,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-beans@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-beans@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-context@2.5.3", @@ -2909,9 +3149,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-context@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-context@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-context-support@2.5.3", @@ -2921,9 +3162,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-context-support@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-context-support@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-core@2.5.3", @@ -2933,9 +3175,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-core@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-core@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.springframework/spring-web@2.5.3", @@ -2945,9 +3188,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.springframework/spring-web@2.5.3", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/org.springframework/spring-web@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/jsp-api@2.0", @@ -2957,9 +3201,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/jsp-api@2.0", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/javax.servlet/jsp-api@2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/jstl@1.1.0", @@ -2969,9 +3214,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/jstl@1.1.0", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/javax.servlet/jstl@1.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/javax.servlet/servlet-api@2.4", @@ -2981,9 +3227,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/javax.servlet/servlet-api@2.4", - "for_package": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "lockfile": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" + "dependency_uid": "pkg:maven/javax.servlet/servlet-api@2.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.mockito/mockito-all@1.8.1", @@ -2993,9 +3240,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.mockito/mockito-all@1.8.1", - "for_package": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1", - "lockfile": "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom" + "dependency_uid": "pkg:maven/org.mockito/mockito-all@1.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.intel.gpe.clients/gpe-clients-all@2.0.4-SNAPSHOT", @@ -3005,9 +3253,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.intel.gpe.clients/gpe-clients-all@2.0.4-SNAPSHOT", - "for_package": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "lockfile": "uni_pom/uni_pom.xml" + "dependency_uid": "pkg:maven/com.intel.gpe.clients/gpe-clients-all@2.0.4-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "uni_pom/uni_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.intel.gpe.clients/gpe-gridbean-api@2.0.5-SNAPSHOT", @@ -3017,9 +3266,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.intel.gpe.clients/gpe-gridbean-api@2.0.5-SNAPSHOT", - "for_package": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "lockfile": "uni_pom/uni_pom.xml" + "dependency_uid": "pkg:maven/com.intel.gpe.clients/gpe-gridbean-api@2.0.5-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "uni_pom/uni_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.intel.gpe/gpe-utils@2.0.5-SNAPSHOT", @@ -3029,9 +3279,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.intel.gpe/gpe-utils@2.0.5-SNAPSHOT", - "for_package": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "lockfile": "uni_pom/uni_pom.xml" + "dependency_uid": "pkg:maven/com.intel.gpe/gpe-utils@2.0.5-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "uni_pom/uni_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/com.intel.gpe.clients/gpe-gridbeans-swt@0.0.2-SNAPSHOT", @@ -3041,9 +3292,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/com.intel.gpe.clients/gpe-gridbeans-swt@0.0.2-SNAPSHOT", - "for_package": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "lockfile": "uni_pom/uni_pom.xml" + "dependency_uid": "pkg:maven/com.intel.gpe.clients/gpe-gridbeans-swt@0.0.2-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "uni_pom/uni_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit@3.8.1", @@ -3053,9 +3305,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit@3.8.1", - "for_package": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "lockfile": "uni_pom/uni_pom.xml" + "dependency_uid": "pkg:maven/junit/junit@3.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "uni_pom/uni_pom.xml", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/junit/junit", @@ -3065,9 +3318,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/junit/junit", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/junit/junit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.hamcrest/hamcrest-core", @@ -3077,9 +3331,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.hamcrest/hamcrest-core", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.hamcrest/hamcrest-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.mockito/mockito-core", @@ -3089,9 +3344,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.mockito/mockito-core", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.mockito/mockito-core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven/maven-plugin-api", @@ -3101,9 +3357,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven/maven-plugin-api", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.apache.maven/maven-plugin-api?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.apache.maven.plugin-tools/maven-plugin-annotations", @@ -3113,9 +3370,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.apache.maven.plugin-tools/maven-plugin-annotations", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.apache.maven.plugin-tools/maven-plugin-annotations?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.codehaus.plexus/plexus-utils", @@ -3125,9 +3383,10 @@ "is_optional": true, "is_resolved": null, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.codehaus.plexus/plexus-utils", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.codehaus.plexus/plexus-utils?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" }, { "purl": "pkg:maven/org.dom4j/dom4j@2.0.1", @@ -3137,9 +3396,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:maven/org.dom4j/dom4j@2.0.1", - "for_package": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "lockfile": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" + "dependency_uid": "pkg:maven/org.dom4j/dom4j@2.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom" } ], "packages": [ @@ -3169,24 +3429,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom", + "package_uid": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "activemq-camel/activemq-camel-pom.xml" ], - "files": [ - "activemq-camel/activemq-camel-pom.xml", - "activemq-camel/activemq-camel-pom.xml.json", - "activemq-camel/activemq-camel-pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom" + "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" }, { "type": "maven", @@ -3214,24 +3471,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/adarwin/adarwin@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/adarwin/adarwin@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom", + "package_uid": "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "adarwin-1.0/adarwin-1.0.pom" ], - "files": [ - "adarwin-1.0/adarwin-1.0.pom", - "adarwin-1.0/adarwin-1.0.pom.json", - "adarwin-1.0/adarwin-1.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/adarwin/adarwin@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom" + "purl": "pkg:maven/adarwin/adarwin@1.0" }, { "type": "maven", @@ -3259,24 +3513,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jai@1.7.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.ant/ant-jai@1.7.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom", + "package_uid": "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "ant-jai-1.7.0/ant-jai-1.7.0.pom" ], - "files": [ - "ant-jai-1.7.0/ant-jai-1.7.0.pom", - "ant-jai-1.7.0/ant-jai-1.7.0.pom.json", - "ant-jai-1.7.0/ant-jai-1.7.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom" + "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0" }, { "type": "maven", @@ -3304,24 +3555,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jsch@1.7.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom", + "package_uid": "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "ant-jsch-1.7.0/ant-jsch-1.7.0.pom" ], - "files": [ - "ant-jsch-1.7.0/ant-jsch-1.7.0.pom", - "ant-jsch-1.7.0/ant-jsch-1.7.0.pom.json", - "ant-jsch-1.7.0/ant-jsch-1.7.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom" + "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0" }, { "type": "maven", @@ -3346,7 +3594,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "public-domain AND gpl-1.0-plus", + "license_expression": "(public-domain AND gpl-1.0-plus) AND unknown", "declared_license": [ { "name": "Public Domain", @@ -3362,24 +3610,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/aopalliance/aopalliance@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "package_uid": "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "aopalliance-1.0/aopalliance-1.0.pom" ], - "files": [ - "aopalliance-1.0/aopalliance-1.0.pom", - "aopalliance-1.0/aopalliance-1.0.pom.json", - "aopalliance-1.0/aopalliance-1.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "purl": "pkg:maven/aopalliance/aopalliance@1.0" }, { "type": "maven", @@ -3407,24 +3652,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/bcel/bcel@5.1?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/bcel/bcel@5.1", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/", + "repository_download_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.jar", + "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom", + "package_uid": "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "bcel-5.1/bcel-5.1.pom" ], - "files": [ - "bcel-5.1/bcel-5.1.pom", - "bcel-5.1/bcel-5.1.pom.json", - "bcel-5.1/bcel-5.1.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/bcel/bcel@5.1", - "repository_homepage_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/", - "repository_download_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom" + "purl": "pkg:maven/bcel/bcel@5.1" }, { "type": "maven", @@ -3481,24 +3723,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/classworlds/classworlds@1.1-alpha-2?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/classworlds/classworlds@1.1-alpha-2", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/", + "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar", + "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom", + "package_uid": "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom" ], - "files": [ - "classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom", - "classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.json", - "classworlds-1.1-alpha2/classworlds-1.1-alpha-2.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2", - "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/", - "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom" + "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2" }, { "type": "maven", @@ -3576,24 +3815,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-fileupload/commons-fileupload@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/commons-fileupload/commons-fileupload@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom", + "package_uid": "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "commons-fileupload-1.0/commons-fileupload-1.0.pom" ], - "files": [ - "commons-fileupload-1.0/commons-fileupload-1.0.pom", - "commons-fileupload-1.0/commons-fileupload-1.0.pom.json", - "commons-fileupload-1.0/commons-fileupload-1.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom" + "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0" }, { "type": "maven", @@ -3843,7 +4079,7 @@ "code_view_url": "http://svn.apache.org/viewcvs.cgi", "vcs_url": "svn+http://svn.apache.org/repos/asf/jakarta/commons/proper/validator/trunk", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "(apache-2.0 AND apache-2.0) AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -3853,24 +4089,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.2.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/commons-validator/commons-validator@1.2.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/", + "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom", + "package_uid": "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "commons-validator-1.2.0/commons-validator-1.2.0.pom" ], - "files": [ - "commons-validator-1.2.0/commons-validator-1.2.0.pom", - "commons-validator-1.2.0/commons-validator-1.2.0.pom.json", - "commons-validator-1.2.0/commons-validator-1.2.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/commons-validator/commons-validator@1.2.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/", - "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom" + "purl": "pkg:maven/commons-validator/commons-validator@1.2.0" }, { "type": "maven", @@ -3898,24 +4131,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom", + "package_uid": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "dbwebx_pom/dbwebx_pom.xml" ], - "files": [ - "dbwebx_pom/dbwebx_pom.xml", - "dbwebx_pom/dbwebx_pom.xml.json", - "dbwebx_pom/dbwebx_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom" + "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" }, { "type": "maven", @@ -3979,24 +4209,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/easyconf/easyconf@0.9.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/easyconf/easyconf@0.9.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/", + "repository_download_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom", + "package_uid": "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "easyconf-0.9.0/easyconf-0.9.0.pom" ], - "files": [ - "easyconf-0.9.0/easyconf-0.9.0.pom", - "easyconf-0.9.0/easyconf-0.9.0.pom.json", - "easyconf-0.9.0/easyconf-0.9.0.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/easyconf/easyconf@0.9.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/", - "repository_download_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom" + "purl": "pkg:maven/easyconf/easyconf@0.9.0" }, { "type": "maven", @@ -4050,7 +4277,7 @@ "code_view_url": "https://svn.codehaus.org/mojo/tags/findbugs-maven-plugin-1.1.1", "vcs_url": "svn+https://svn.codehaus.org/mojo/tags/findbugs-maven-plugin-1.1.1", "copyright": null, - "license_expression": "mit", + "license_expression": "unknown", "declared_license": [ { "name": "MIT", @@ -4060,24 +4287,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/", + "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom", + "package_uid": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom" ], - "files": [ - "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom", - "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.json", - "findbugs-maven-plugin-1.1.1/findbugs-maven-plugin-1.1.1.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/", - "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom" + "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" }, { "type": "maven", @@ -4105,24 +4329,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom", + "package_uid": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "fna2_pom/fna2_pom.xml" ], - "files": [ - "fna2_pom/fna2_pom.xml", - "fna2_pom/fna2_pom.xml.json", - "fna2_pom/fna2_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom" + "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" }, { "type": "maven", @@ -4150,24 +4371,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom", + "package_uid": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "fna_pom_project/fna_pom_project.xml" ], - "files": [ - "fna_pom_project/fna_pom_project.xml", - "fna_pom_project/fna_pom_project.xml.json", - "fna_pom_project/fna_pom_project.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom" + "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" }, { "type": "maven", @@ -4200,7 +4418,7 @@ "code_view_url": "https://github.com/jode/baz-bar-parent/tree/master", "vcs_url": "git://github.com/jode/baz-bar-parent.git", "copyright": null, - "license_expression": "epl-1.0", + "license_expression": "(epl-1.0 AND bsd-new) AND unknown", "declared_license": [ { "name": "Eclipse Public License - v 1.0", @@ -4210,24 +4428,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom", + "package_uid": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "foo-pom/foo-pom.xml" ], - "files": [ - "foo-pom/foo-pom.xml", - "foo-pom/foo-pom.xml.json", - "foo-pom/foo-pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom" + "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" }, { "type": "maven", @@ -4255,24 +4470,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "package_uid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "gero_pom/gero_pom.xml" ], - "files": [ - "gero_pom/gero_pom.xml", - "gero_pom/gero_pom.xml.json", - "gero_pom/gero_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" }, { "type": "maven", @@ -4329,24 +4541,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom", + "package_uid": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "idega_pom/idega_pom.xml" ], - "files": [ - "idega_pom/idega_pom.xml", - "idega_pom/idega_pom.xml.json", - "idega_pom/idega_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom" + "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" }, { "type": "maven", @@ -4379,7 +4588,7 @@ "code_view_url": "https://jrecordbind.dev.java.net/source/browse/jrecordbind/", "vcs_url": "svn+https://jrecordbind.dev.java.net/svn/jrecordbind/trunk/", "copyright": null, - "license_expression": "lgpl-2.0-plus AND lgpl-2.1-plus", + "license_expression": "((lgpl-2.1 OR apache-2.0) AND lgpl-2.1-plus) AND unknown", "declared_license": [ { "name": "LGPL", @@ -4389,24 +4598,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/", + "repository_download_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.jar", + "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom", + "package_uid": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "jrecordbind-2.3.4/jrecordbind-2.3.4.pom" ], - "files": [ - "jrecordbind-2.3.4/jrecordbind-2.3.4.pom", - "jrecordbind-2.3.4/jrecordbind-2.3.4.pom.json", - "jrecordbind-2.3.4/jrecordbind-2.3.4.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", - "repository_homepage_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/", - "repository_download_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom" + "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" }, { "type": "maven", @@ -4439,7 +4645,7 @@ "code_view_url": "http://svn.apache.org/viewcvs.cgi/logging/log4j/tags/v1_2_15_rc6", "vcs_url": "svn+http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_15_rc6", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -4449,24 +4655,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/log4j/log4j@1.2.15?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/log4j/log4j@1.2.15", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/", + "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.jar", + "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom", + "package_uid": "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "log4j/log4j-pom.xml" ], - "files": [ - "log4j/log4j-pom.xml", - "log4j/log4j-pom.xml.json", - "log4j/log4j-pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/log4j/log4j@1.2.15", - "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/", - "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.jar", - "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom" + "purl": "pkg:maven/log4j/log4j@1.2.15" }, { "type": "maven", @@ -4491,7 +4694,7 @@ "code_view_url": "http://svn.qos.ch/viewcvs/logback/access/trunk/", "vcs_url": "http://svn.qos.ch/repos/logback/access/trunk/", "copyright": null, - "license_expression": "lgpl-2.0-plus", + "license_expression": "lgpl-2.1-plus AND unknown", "declared_license": [ { "name": "GNU Lesser General Public License", @@ -4501,24 +4704,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ch.qos.logback/logback-access@0.2.5?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/", + "repository_download_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.jar", + "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom", + "package_uid": "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "logback-access/logback-access.pom" ], - "files": [ - "logback-access/logback-access.pom", - "logback-access/logback-access.pom.json", - "logback-access/logback-access.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5", - "repository_homepage_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/", - "repository_download_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom" + "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5" }, { "type": "maven", @@ -4631,24 +4831,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/", + "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "package_uid": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" ], - "files": [ - "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", - "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.json", - "plexus-interactivity-api-1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/", - "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" }, { "type": "maven", @@ -4676,24 +4873,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom", + "package_uid": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "pom-generic/pom.xml" ], - "files": [ - "pom-generic/pom.xml", - "pom-generic/pom.xml.json", - "pom-generic/pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom" + "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" }, { "type": "maven", @@ -4721,24 +4915,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "package_uid": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "proper-pom/proper_pom.xml" ], - "files": [ - "proper-pom/proper_pom.xml", - "proper-pom/proper_pom.xml.json", - "proper-pom/proper_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" }, { "type": "maven", @@ -4766,24 +4957,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.modeler/modeler@0.1?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.modeler/modeler@0.1", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/", + "repository_download_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom", + "package_uid": "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "rel_pom/rel_pom.xml" ], - "files": [ - "rel_pom/rel_pom.xml", - "rel_pom/rel_pom.xml.json", - "rel_pom/rel_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.modeler/modeler@0.1", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/", - "repository_download_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom" + "purl": "pkg:maven/org.modeler/modeler@0.1" }, { "type": "maven", @@ -4833,24 +5021,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom", + "package_uid": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "sea_pom/sea_pom.xml" ], - "files": [ - "sea_pom/sea_pom.xml", - "sea_pom/sea_pom.xml.json", - "sea_pom/sea_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom" + "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" }, { "type": "maven", @@ -4878,24 +5063,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/specs@1.3?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.apache.geronimo.specs/specs@1.3", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/", + "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom", + "package_uid": "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "specs-1.3/specs-1.3.pom" ], - "files": [ - "specs-1.3/specs-1.3.pom", - "specs-1.3/specs-1.3.pom.json", - "specs-1.3/specs-1.3.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/", - "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom" + "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3" }, { "type": "maven", @@ -4928,7 +5110,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -4938,24 +5120,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring@2.5.4?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.springframework/spring@2.5.4", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/", + "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom", + "package_uid": "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "spring-2.5.4/spring-2.5.4.pom" ], - "files": [ - "spring-2.5.4/spring-2.5.4.pom", - "spring-2.5.4/spring-2.5.4.pom.json", - "spring-2.5.4/spring-2.5.4.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.springframework/spring@2.5.4", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/", - "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom" + "purl": "pkg:maven/org.springframework/spring@2.5.4" }, { "type": "maven", @@ -4988,7 +5167,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -4998,24 +5177,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-orm@2.5.3?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.springframework/spring-orm@2.5.3", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/", + "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom", + "package_uid": "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "spring-orm-2.5.3/spring-orm-2.5.3.pom" ], - "files": [ - "spring-orm-2.5.3/spring-orm-2.5.3.pom", - "spring-orm-2.5.3/spring-orm-2.5.3.pom.json", - "spring-orm-2.5.3/spring-orm-2.5.3.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.springframework/spring-orm@2.5.3", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/", - "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom" + "purl": "pkg:maven/org.springframework/spring-orm@2.5.3" }, { "type": "maven", @@ -5048,7 +5224,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -5058,24 +5234,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-webmvc@2.5.3?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/", + "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom", + "package_uid": "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom" ], - "files": [ - "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom", - "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.json", - "spring-webmvc-2.5.3/spring-webmvc-2.5.3.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/", - "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom" + "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3" }, { "type": "maven", @@ -5111,24 +5284,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/", + "repository_download_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom", + "package_uid": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom" ], - "files": [ - "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom", - "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.json", - "startup-trigger-plugin-0.1/startup-trigger-plugin-0.1.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/", - "repository_download_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom" + "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" }, { "type": "maven", @@ -5156,24 +5326,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom", + "package_uid": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "uni_pom/uni_pom.xml" ], - "files": [ - "uni_pom/uni_pom.xml", - "uni_pom/uni_pom.xml.json", - "uni_pom/uni_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom" + "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" }, { "type": "maven", @@ -5201,24 +5368,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/", + "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom", + "package_uid": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "urwerky_pom/urwerky_pom.xml" ], - "files": [ - "urwerky_pom/urwerky_pom.xml", - "urwerky_pom/urwerky_pom.xml.json", - "urwerky_pom/urwerky_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/", - "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom" + "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" }, { "type": "maven", @@ -5246,24 +5410,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/", + "repository_download_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.jar", + "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom", + "package_uid": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "webre_pom/webre_pom.xml" ], - "files": [ - "webre_pom/webre_pom.xml", - "webre_pom/webre_pom.xml.json", - "webre_pom/webre_pom.xml.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT", - "repository_homepage_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/", - "repository_download_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom" + "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" }, { "type": "maven", @@ -5291,24 +5452,21 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/", + "repository_download_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.jar", + "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom", + "package_uid": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom" ], - "files": [ - "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom", - "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.json", - "xml-format-maven-plugin-3.0.6/xml-format-maven-plugin-3.0.6.pom.package.json" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", - "repository_homepage_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/", - "repository_download_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom" + "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" } ], "files": [ @@ -5316,7 +5474,28 @@ "path": "activemq-camel", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5349,10 +5528,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -5455,14 +5634,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/activemq/activemq-camel/5.4.2/activemq-camel-5.4.2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" } ], "for_packages": [ - "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" + "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5471,7 +5670,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" + "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5480,7 +5698,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.activemq/activemq-camel@5.4.2" + "pkg:maven/org.apache.activemq/activemq-camel@5.4.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5488,7 +5725,27 @@ "path": "adarwin-1.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5521,20 +5778,39 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/adarwin/adarwin@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/adarwin/adarwin@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/adarwin/adarwin/1.0/adarwin-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/adarwin/adarwin@1.0" } ], "for_packages": [ - "pkg:maven/adarwin/adarwin@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5543,7 +5819,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/adarwin/adarwin@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5552,7 +5846,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/adarwin/adarwin@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5560,7 +5872,27 @@ "path": "ant-jai-1.7.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5593,10 +5925,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jai@1.7.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -5627,14 +5959,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jai/1.7.0/ant-jai-1.7.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.ant/ant-jai@1.7.0" } ], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jai@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5643,7 +5994,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jai@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5652,7 +6021,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jai@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5660,7 +6047,27 @@ "path": "ant-jsch-1.7.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5693,10 +6100,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.ant/ant-jsch@1.7.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -5718,14 +6125,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/ant/ant-jsch/1.7.0/ant-jsch-1.7.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.ant/ant-jsch@1.7.0" } ], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jsch@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5734,7 +6160,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jsch@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5743,7 +6187,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.ant/ant-jsch@1.7.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5751,7 +6213,27 @@ "path": "aopalliance-1.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5781,7 +6263,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "public-domain AND gpl-1.0-plus", + "license_expression": "(public-domain AND gpl-1.0-plus) AND unknown", "declared_license": [ { "name": "Public Domain", @@ -5797,20 +6279,39 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aopalliance/aopalliance@1.0" } ], "for_packages": [ - "pkg:maven/aopalliance/aopalliance@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5819,7 +6320,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/aopalliance/aopalliance@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5828,7 +6347,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/aopalliance/aopalliance@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5836,7 +6373,27 @@ "path": "bcel-5.1", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5869,20 +6426,39 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/bcel/bcel@5.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/bcel/bcel@5.1", "repository_homepage_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/", "repository_download_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/bcel/bcel/5.1/bcel-5.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/bcel/bcel@5.1" } ], "for_packages": [ - "pkg:maven/bcel/bcel@5.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5891,7 +6467,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/bcel/bcel@5.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5900,7 +6494,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/bcel/bcel@5.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5908,7 +6520,27 @@ "path": "classworlds-1.1-alpha2", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -5970,20 +6602,39 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/classworlds/classworlds@1.1-alpha-2?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2", "repository_homepage_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/", "repository_download_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar", - "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom" + "api_data_url": "https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/classworlds/classworlds@1.1-alpha-2" } ], "for_packages": [ - "pkg:maven/classworlds/classworlds@1.1-alpha-2" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -5992,7 +6643,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/classworlds/classworlds@1.1-alpha-2" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6001,7 +6670,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/classworlds/classworlds@1.1-alpha-2" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6009,7 +6696,27 @@ "path": "commons-fileupload-1.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -6092,10 +6799,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-fileupload/commons-fileupload@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -6117,14 +6824,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.0/commons-fileupload-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-fileupload/commons-fileupload@1.0" } ], "for_packages": [ - "pkg:maven/commons-fileupload/commons-fileupload@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6133,7 +6859,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/commons-fileupload/commons-fileupload@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6142,7 +6886,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/commons-fileupload/commons-fileupload@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6150,7 +6912,27 @@ "path": "commons-validator-1.2.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -6405,7 +7187,7 @@ "code_view_url": "http://svn.apache.org/viewcvs.cgi", "vcs_url": "svn+http://svn.apache.org/repos/asf/jakarta/commons/proper/validator/trunk", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "(apache-2.0 AND apache-2.0) AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -6415,10 +7197,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/commons-validator/commons-validator@1.2.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -6476,14 +7258,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/commons-validator/commons-validator@1.2.0", "repository_homepage_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/", "repository_download_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/commons-validator/commons-validator@1.2.0" } ], "for_packages": [ - "pkg:maven/commons-validator/commons-validator@1.2.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6492,7 +7293,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/commons-validator/commons-validator@1.2.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6501,7 +7320,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/commons-validator/commons-validator@1.2.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6509,7 +7346,28 @@ "path": "dbwebx_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -6542,20 +7400,40 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/dbwebx/tools/0.0.1.SNAPSHOT/tools-0.0.1.SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" } ], "for_packages": [ - "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6564,7 +7442,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6573,7 +7470,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.dbwebx/tools@0.0.1.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6581,7 +7497,27 @@ "path": "easyconf-0.9.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -6650,10 +7586,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/easyconf/easyconf@0.9.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -6819,14 +7755,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/easyconf/easyconf@0.9.0", "repository_homepage_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/", "repository_download_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/easyconf/easyconf/0.9.0/easyconf-0.9.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/easyconf/easyconf@0.9.0" } ], "for_packages": [ - "pkg:maven/easyconf/easyconf@0.9.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6835,7 +7790,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/easyconf/easyconf@0.9.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6844,7 +7817,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/easyconf/easyconf@0.9.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6852,7 +7843,27 @@ "path": "findbugs-maven-plugin-1.1.1", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -6911,7 +7922,7 @@ "code_view_url": "https://svn.codehaus.org/mojo/tags/findbugs-maven-plugin-1.1.1", "vcs_url": "svn+https://svn.codehaus.org/mojo/tags/findbugs-maven-plugin-1.1.1", "copyright": null, - "license_expression": "mit", + "license_expression": "unknown", "declared_license": [ { "name": "MIT", @@ -6921,10 +7932,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -6973,14 +7984,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/1.1.1/findbugs-maven-plugin-1.1.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" } ], "for_packages": [ - "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6989,7 +8019,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -6998,7 +8046,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7006,7 +8072,28 @@ "path": "fna2_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7039,10 +8126,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7136,14 +8223,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/lcds/flex_app/1.0-SNAPSHOT/flex_app-1.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7152,7 +8259,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7161,7 +8287,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.lcds/flex_app@1.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7169,7 +8314,28 @@ "path": "fna_pom_project", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7202,10 +8368,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7272,14 +8438,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/adobe/ac/samples/bash/bash_flex_app/1.0/bash_flex_app-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" } ], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7288,7 +8474,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7297,7 +8502,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.adobe.ac.samples.bash/bash_flex_app@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7305,7 +8529,28 @@ "path": "foo-pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7343,7 +8588,7 @@ "code_view_url": "https://github.com/jode/baz-bar-parent/tree/master", "vcs_url": "git://github.com/jode/baz-bar-parent.git", "copyright": null, - "license_expression": "epl-1.0", + "license_expression": "(epl-1.0 AND bsd-new) AND unknown", "declared_license": [ { "name": "Eclipse Public License - v 1.0", @@ -7353,10 +8598,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7432,14 +8677,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/myco/foo/bar/baz/baz-bar-parent/1.0/baz-bar-parent-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" } ], "for_packages": [ - "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7448,7 +8713,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7457,7 +8741,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.myco.foo.bar.baz/baz-bar-parent@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7465,7 +8768,28 @@ "path": "gero_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7498,10 +8822,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7514,14 +8838,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7530,7 +8874,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7539,7 +8902,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7547,7 +8929,28 @@ "path": "idega_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7609,10 +9012,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7652,14 +9055,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/com/idega/block/addon/com.idega.block.contract/4.1.3-SNAPSHOT/com.idega.block.contract-4.1.3-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7668,7 +9091,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7677,7 +9119,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/com.idega.block.addon/com.idega.block.contract@4.1.3-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7685,7 +9146,27 @@ "path": "jrecordbind-2.3.4", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7723,7 +9204,7 @@ "code_view_url": "https://jrecordbind.dev.java.net/source/browse/jrecordbind/", "vcs_url": "svn+https://jrecordbind.dev.java.net/svn/jrecordbind/trunk/", "copyright": null, - "license_expression": "lgpl-2.0-plus AND lgpl-2.1-plus", + "license_expression": "((lgpl-2.1 OR apache-2.0) AND lgpl-2.1-plus) AND unknown", "declared_license": [ { "name": "LGPL", @@ -7733,10 +9214,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7776,14 +9257,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4", "repository_homepage_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/", "repository_download_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/it/assist/jrecordbind/jrecordbind${artifactId.ext}/2.3.4/jrecordbind${artifactId.ext}-2.3.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" } ], "for_packages": [ - "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7792,7 +9292,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7801,7 +9319,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7809,7 +9345,28 @@ "path": "log4j", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7847,7 +9404,7 @@ "code_view_url": "http://svn.apache.org/viewcvs.cgi/logging/log4j/tags/v1_2_15_rc6", "vcs_url": "svn+http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_15_rc6", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -7857,10 +9414,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/log4j/log4j@1.2.15?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7918,14 +9475,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/log4j/log4j@1.2.15", "repository_homepage_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/", "repository_download_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.jar", - "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom" + "api_data_url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.15/log4j-1.2.15.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/log4j/log4j@1.2.15" } ], "for_packages": [ - "pkg:maven/log4j/log4j@1.2.15" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7934,7 +9511,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/log4j/log4j@1.2.15" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7943,7 +9539,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/log4j/log4j@1.2.15" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/log4j/log4j@1.2.15?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -7951,7 +9566,27 @@ "path": "logback-access", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -7981,7 +9616,7 @@ "code_view_url": "http://svn.qos.ch/viewcvs/logback/access/trunk/", "vcs_url": "http://svn.qos.ch/repos/logback/access/trunk/", "copyright": null, - "license_expression": "lgpl-2.0-plus", + "license_expression": "lgpl-2.1-plus AND unknown", "declared_license": [ { "name": "GNU Lesser General Public License", @@ -7991,10 +9626,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ch.qos.logback/logback-access@0.2.5?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8043,14 +9678,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5", "repository_homepage_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/", "repository_download_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.jar", - "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom" + "api_data_url": "https://repo1.maven.org/maven2/ch/qos/logback/logback-access/0.2.5/logback-access-0.2.5.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ch.qos.logback/logback-access@0.2.5" } ], "for_packages": [ - "pkg:maven/ch.qos.logback/logback-access@0.2.5" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8059,7 +9713,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ch.qos.logback/logback-access@0.2.5" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8068,7 +9740,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ch.qos.logback/logback-access@0.2.5" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8076,7 +9766,27 @@ "path": "plexus-interactivity-api-1.0-alpha-4", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -8194,10 +9904,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8237,14 +9947,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/", "repository_download_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" } ], "for_packages": [ - "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8253,7 +9982,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8262,7 +10009,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8270,7 +10035,28 @@ "path": "pom-generic", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -8303,20 +10089,40 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/modules/main/1.0.0-SNAPSHOT/main-1.0.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8325,7 +10131,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8334,7 +10159,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test.modules/main@1.0.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8342,7 +10186,28 @@ "path": "proper-pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -8375,10 +10240,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8391,14 +10256,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/bundles/axis/1.4_1-SNAPSHOT/axis-1.4_1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8407,7 +10292,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8416,7 +10320,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.bundles/axis@1.4_1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8424,7 +10347,28 @@ "path": "rel_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -8457,10 +10401,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.modeler/modeler@0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8545,14 +10489,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.modeler/modeler@0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/modeler/modeler/0.1/modeler-0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.modeler/modeler@0.1" } ], "for_packages": [ - "pkg:maven/org.modeler/modeler@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8561,7 +10525,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.modeler/modeler@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8570,7 +10553,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.modeler/modeler@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.modeler/modeler@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8578,7 +10580,28 @@ "path": "sea_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -8633,10 +10656,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8973,14 +10996,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/no/knowit/seam/root/2.2.0-SNAPSHOT/root-2.2.0-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8989,7 +11032,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -8998,7 +11060,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/no.knowit.seam/root@2.2.0-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9006,7 +11087,27 @@ "path": "specs-1.3", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -9039,10 +11140,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.apache.geronimo.specs/specs@1.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -9055,14 +11156,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/apache/geronimo/specs/specs/1.3/specs-1.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.apache.geronimo.specs/specs@1.3" } ], "for_packages": [ - "pkg:maven/org.apache.geronimo.specs/specs@1.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9071,7 +11191,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.specs/specs@1.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9080,7 +11218,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.apache.geronimo.specs/specs@1.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9088,7 +11244,27 @@ "path": "spring-2.5.4", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -9126,7 +11302,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -9136,10 +11312,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring@2.5.4?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -9728,14 +11904,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring@2.5.4", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring/2.5.4/spring-2.5.4.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring@2.5.4" } ], "for_packages": [ - "pkg:maven/org.springframework/spring@2.5.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9744,7 +11939,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring@2.5.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9753,7 +11966,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring@2.5.4" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9761,7 +11992,27 @@ "path": "spring-orm-2.5.3", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -9799,7 +12050,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -9809,10 +12060,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-orm@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -9960,14 +12211,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-orm@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-orm/2.5.3/spring-orm-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-orm@2.5.3" } ], "for_packages": [ - "pkg:maven/org.springframework/spring-orm@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9976,7 +12246,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring-orm@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9985,7 +12273,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring-orm@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -9993,7 +12299,27 @@ "path": "spring-webmvc-2.5.3", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10031,7 +12357,7 @@ "code_view_url": "http://springframework.cvs.sourceforge.net/springframework/", "vcs_url": "cvs+pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring", "copyright": null, - "license_expression": "apache-2.0", + "license_expression": "apache-2.0 AND unknown", "declared_license": [ { "name": "The Apache Software License, Version 2.0", @@ -10041,10 +12367,10 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.springframework/spring-webmvc@2.5.3?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -10246,14 +12572,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3", "repository_homepage_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/", "repository_download_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/springframework/spring-webmvc/2.5.3/spring-webmvc-2.5.3.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.springframework/spring-webmvc@2.5.3" } ], "for_packages": [ - "pkg:maven/org.springframework/spring-webmvc@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10262,7 +12607,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring-webmvc@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10271,7 +12634,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.springframework/spring-webmvc@2.5.3" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10279,7 +12660,27 @@ "path": "startup-trigger-plugin-0.1", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10320,10 +12721,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -10336,14 +12737,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1", "repository_homepage_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/", "repository_download_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/jvnet/hudson/plugins/startup-trigger-plugin/0.1/startup-trigger-plugin-0.1.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" } ], "for_packages": [ - "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10352,7 +12772,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10361,7 +12799,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10369,7 +12825,28 @@ "path": "uni_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10402,10 +12879,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -10454,14 +12931,34 @@ "resolved_package": {} } ], - "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/de/fzj/unicore/rcp/eclipseSequencePlugin/0.0.1-SNAPSHOT/eclipseSequencePlugin-0.0.1-SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" } ], "for_packages": [ - "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10470,7 +12967,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10479,7 +12995,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/de.fzj.unicore.rcp/eclipseSequencePlugin@0.0.1-SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10487,7 +13022,28 @@ "path": "urwerky_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10520,20 +13076,40 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0", "repository_homepage_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/", "repository_download_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/ur/urwerk/test/ur.urwerk.test.module-y/1.0.0/ur.urwerk.test.module-y-1.0.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" } ], "for_packages": [ - "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10542,7 +13118,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10551,7 +13146,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ur.urwerk.test/ur.urwerk.test.module-y@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10559,7 +13173,28 @@ "path": "webre_pom", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10592,20 +13227,40 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT", "repository_homepage_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/", "repository_download_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.jar", - "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom" + "api_data_url": "https://repo1.maven.org/maven2/org/webreformatter/wrappers/com.google.gwt.query/0.1.5.SNAPSHOT/com.google.gwt.query-0.1.5.SNAPSHOT.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" } ], "for_packages": [ - "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10614,7 +13269,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10623,7 +13297,26 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.webreformatter.wrappers/com.google.gwt.query@0.1.5.SNAPSHOT?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10631,7 +13324,27 @@ "path": "xml-format-maven-plugin-3.0.6", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -10664,10 +13377,10 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -10734,14 +13447,33 @@ "resolved_package": {} } ], - "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6", "repository_homepage_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/", "repository_download_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.jar", - "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom" + "api_data_url": "https://repo1.maven.org/maven2/au/com/acegi/xml-format-maven-plugin/3.0.6/xml-format-maven-plugin-3.0.6.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" } ], "for_packages": [ - "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10750,7 +13482,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -10759,7 +13509,25 @@ "type": "file", "package_data": [], "for_packages": [ - "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6" + "pkg:maven/adarwin/adarwin@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jai@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.ant/ant-jsch@1.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/bcel/bcel@5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/classworlds/classworlds@1.1-alpha-2?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-fileupload/commons-fileupload@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/commons-validator/commons-validator@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/easyconf/easyconf@0.9.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.mojo/findbugs-maven-plugin@1.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/it.assist.jrecordbind/jrecordbind%24%7BartifactId.ext%7D@2.3.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/ch.qos.logback/logback-access@0.2.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.codehaus.plexus/plexus-interactivity-api@1.0-alpha-4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.apache.geronimo.specs/specs@1.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring@2.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-orm@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.springframework/spring-webmvc@2.5.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/org.jvnet.hudson.plugins/startup-trigger-plugin@0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "pkg:maven/au.com.acegi/xml-format-maven-plugin@3.0.6?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/mui-package-expected.json b/tests/packagedcode/data/plugin/mui-package-expected.json index de19896d197..84df1bd6eec 100644 --- a/tests/packagedcode/data/plugin/mui-package-expected.json +++ b/tests/packagedcode/data/plugin/mui-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Microsoft\u00ae Windows\u00ae Operating System", - "version": "10.0.18362.1256", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "Common Log File System Driver", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "package_data_files": [ - "clfs.sys.mui" - ], - "files": [ - "clfs.sys.mui" - ], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "clfs.sys.mui", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ], - "for_packages": [ - "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/mum-package-expected.json b/tests/packagedcode/data/plugin/mum-package-expected.json index 2a444e2329a..bd39112528d 100644 --- a/tests/packagedcode/data/plugin/mum-package-expected.json +++ b/tests/packagedcode/data/plugin/mum-package-expected.json @@ -61,14 +61,15 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:windows-update/Package_1_for_KB4601060@10.0.3770.4", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "microsoft_update_manifest_mum", + "purl": "pkg:windows-update/Package_1_for_KB4601060@10.0.3770.4" } ], "for_packages": [], diff --git a/tests/packagedcode/data/plugin/mun-package-expected.json b/tests/packagedcode/data/plugin/mun-package-expected.json index 9227a3da03c..34d6f62d4b4 100644 --- a/tests/packagedcode/data/plugin/mun-package-expected.json +++ b/tests/packagedcode/data/plugin/mun-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Microsoft\u00ae Windows\u00ae Operating System", - "version": "10.0.18362.1256", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "Crypto API32", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "package_data_files": [ - "crypt32.dll.mun" - ], - "files": [ - "crypt32.dll.mun" - ], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "crypt32.dll.mun", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ], - "for_packages": [ - "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/npm-package-expected.json b/tests/packagedcode/data/plugin/npm-package-expected.json index dafa8429aa2..11bf5f87ffa 100644 --- a/tests/packagedcode/data/plugin/npm-package-expected.json +++ b/tests/packagedcode/data/plugin/npm-package-expected.json @@ -29,9 +29,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/mocha", - "for_package": "pkg:npm/cookie-signature@1.0.3", - "lockfile": "package.json" + "dependency_uid": "pkg:npm/mocha?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/cookie-signature@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/should", @@ -41,9 +42,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/should", - "for_package": "pkg:npm/cookie-signature@1.0.3", - "lockfile": "package.json" + "dependency_uid": "pkg:npm/should?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/cookie-signature@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -85,20 +87,19 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/cookie-signature@1.0.3", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/cookie-signature", + "repository_download_url": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", + "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3", + "package_uid": "pkg:npm/cookie-signature@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "package.json" ], - "files": [ - "package.json" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/cookie-signature@1.0.3", - "repository_homepage_url": "https://www.npmjs.com/package/cookie-signature", - "repository_download_url": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3" + "purl": "pkg:npm/cookie-signature@1.0.3" } ], "files": [ @@ -144,8 +145,8 @@ "license_expression": null, "declared_license": [], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -167,14 +168,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/cookie-signature@1.0.3", "repository_homepage_url": "https://www.npmjs.com/package/cookie-signature", "repository_download_url": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.3.tgz", - "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3" + "api_data_url": "https://registry.npmjs.org/cookie-signature/1.0.3", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/cookie-signature@1.0.3" } ], "for_packages": [ - "pkg:npm/cookie-signature@1.0.3" + "pkg:npm/cookie-signature@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/nuget-package-expected.json b/tests/packagedcode/data/plugin/nuget-package-expected.json index c65f7383929..91db04d670e 100644 --- a/tests/packagedcode/data/plugin/nuget-package-expected.json +++ b/tests/packagedcode/data/plugin/nuget-package-expected.json @@ -63,20 +63,19 @@ "license_expression": "apache-2.0", "declared_license": "http://www.apache.org/licenses/LICENSE-2.0.html", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:nuget/Castle.Core@4.2.1", - "package_data_files": [ + "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", + "package_uid": "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "Castle.Core.nuspec" ], - "files": [ - "Castle.Core.nuspec" + "datasource_ids": [ + "nuget_nupsec" ], - "purl": "pkg:nuget/Castle.Core@4.2.1", - "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" + "purl": "pkg:nuget/Castle.Core@4.2.1" } ], "files": [ @@ -125,18 +124,19 @@ "license_expression": "apache-2.0", "declared_license": "http://www.apache.org/licenses/LICENSE-2.0.html", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:nuget/Castle.Core@4.2.1", "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" + "api_data_url": "https://api.nuget.org/v3/registration3/castle.core/4.2.1.json", + "datasource_id": "nuget_nupsec", + "purl": "pkg:nuget/Castle.Core@4.2.1" } ], "for_packages": [ - "pkg:nuget/Castle.Core@4.2.1" + "pkg:nuget/Castle.Core@4.2.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/opam-package-expected.json b/tests/packagedcode/data/plugin/opam-package-expected.json index 3da4d9bc905..4982b914fee 100644 --- a/tests/packagedcode/data/plugin/opam-package-expected.json +++ b/tests/packagedcode/data/plugin/opam-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:opam/ocaml", - "for_package": null, - "lockfile": "ocaml-variants.opam" + "dependency_uid": "pkg:opam/ocaml?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "ocaml-variants.opam", + "datasource_id": "opam_file" }, { "purl": "pkg:opam/base-unix", @@ -41,9 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:opam/base-unix", - "for_package": null, - "lockfile": "ocaml-variants.opam" + "dependency_uid": "pkg:opam/base-unix?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "ocaml-variants.opam", + "datasource_id": "opam_file" }, { "purl": "pkg:opam/base-bigarray", @@ -53,9 +55,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:opam/base-bigarray", - "for_package": null, - "lockfile": "ocaml-variants.opam" + "dependency_uid": "pkg:opam/base-bigarray?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "ocaml-variants.opam", + "datasource_id": "opam_file" }, { "purl": "pkg:opam/base-threads", @@ -65,9 +68,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:opam/base-threads", - "for_package": null, - "lockfile": "ocaml-variants.opam" + "dependency_uid": "pkg:opam/base-threads?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "ocaml-variants.opam", + "datasource_id": "opam_file" } ], "packages": [], @@ -152,8 +156,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -193,10 +197,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "opam_file", + "purl": null } ], "for_packages": [], diff --git a/tests/packagedcode/data/plugin/phpcomposer-package-expected.json b/tests/packagedcode/data/plugin/phpcomposer-package-expected.json index e36d12b76b2..52cc46e4b7a 100644 --- a/tests/packagedcode/data/plugin/phpcomposer-package-expected.json +++ b/tests/packagedcode/data/plugin/phpcomposer-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/php", - "for_package": "pkg:composer/jandreasn/a-timer", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/php?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/jandreasn/a-timer?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/phpunit/phpunit", @@ -41,9 +42,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/phpunit/phpunit", - "for_package": "pkg:composer/jandreasn/a-timer", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/phpunit/phpunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/jandreasn/a-timer?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/squizlabs/php_codesniffer", @@ -53,9 +55,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/squizlabs/php_codesniffer", - "for_package": "pkg:composer/jandreasn/a-timer", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/squizlabs/php_codesniffer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/jandreasn/a-timer?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" } ], "packages": [ @@ -100,20 +103,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:composer/jandreasn/a-timer", - "package_data_files": [ + "repository_homepage_url": "https://packagist.org/packages/jandreasn/a-timer", + "repository_download_url": null, + "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json", + "package_uid": "pkg:composer/jandreasn/a-timer?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "composer.json" ], - "files": [ - "composer.json" + "datasource_ids": [ + "php_composer_json" ], - "purl": "pkg:composer/jandreasn/a-timer", - "repository_homepage_url": "https://packagist.org/packages/jandreasn/a-timer", - "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json" + "purl": "pkg:composer/jandreasn/a-timer" } ], "files": [ @@ -162,8 +164,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -194,14 +196,15 @@ "resolved_package": {} } ], - "purl": "pkg:composer/jandreasn/a-timer", "repository_homepage_url": "https://packagist.org/packages/jandreasn/a-timer", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json" + "api_data_url": "https://packagist.org/p/packages/jandreasn/a-timer.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/jandreasn/a-timer" } ], "for_packages": [ - "pkg:composer/jandreasn/a-timer" + "pkg:composer/jandreasn/a-timer?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/pubspec-expected.json b/tests/packagedcode/data/plugin/pubspec-expected.json index 4ff4f130f8f..765f8b2f98d 100644 --- a/tests/packagedcode/data/plugin/pubspec-expected.json +++ b/tests/packagedcode/data/plugin/pubspec-expected.json @@ -20,14 +20,192 @@ } } ], - "dependencies": [], - "packages": [], + "dependencies": [ + { + "purl": "pkg:pubspec/http", + "extracted_requirement": ">=0.12.0 <0.13.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:pubspec/http?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:dart/openapi@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "authors-pubspec.yaml", + "datasource_id": "pubspec_yaml" + }, + { + "purl": "pkg:pubspec/test", + "extracted_requirement": "^1.3.0", + "scope": "dev_dependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:pubspec/test?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:dart/openapi@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "authors-pubspec.yaml", + "datasource_id": "pubspec_yaml" + }, + { + "purl": "pkg:pubspec/sdk", + "extracted_requirement": ">=2.0.0 <3.0.0", + "scope": "environment", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:pubspec/sdk?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:dart/openapi@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "authors-pubspec.yaml", + "datasource_id": "pubspec_yaml" + } + ], + "packages": [ + { + "type": "dart", + "namespace": null, + "name": "openapi", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "dart", + "description": "OpenAPI API client", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "John Does", + "email": null, + "url": null + }, + { + "type": "person", + "role": "author", + "name": "Author ", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "homepage", + "download_url": "https://pub.dartlang.org/packages/openapi/versions/1.0.0.tar.gz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://pub.dev/packages/openapi/versions/1.0.0", + "repository_download_url": "https://pub.dartlang.org/packages/openapi/versions/1.0.0.tar.gz", + "api_data_url": "https://pub.dev/api/packages/openapi/versions/1.0.0", + "package_uid": "pkg:dart/openapi@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "authors-pubspec.yaml" + ], + "datasource_ids": [ + "pubspec_yaml" + ], + "purl": "pkg:dart/openapi@1.0.0" + } + ], "files": [ { "path": "authors-pubspec.yaml", "type": "file", - "package_data": [], - "for_packages": [], + "package_data": [ + { + "type": "dart", + "namespace": null, + "name": "openapi", + "version": "1.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "dart", + "description": "OpenAPI API client", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "John Does", + "email": null, + "url": null + }, + { + "type": "person", + "role": "author", + "name": "Author ", + "email": null, + "url": null + } + ], + "keywords": [], + "homepage_url": "homepage", + "download_url": "https://pub.dartlang.org/packages/openapi/versions/1.0.0.tar.gz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:pubspec/http", + "extracted_requirement": ">=0.12.0 <0.13.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:pubspec/test", + "extracted_requirement": "^1.3.0", + "scope": "dev_dependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:pubspec/sdk", + "extracted_requirement": ">=2.0.0 <3.0.0", + "scope": "environment", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://pub.dev/packages/openapi/versions/1.0.0", + "repository_download_url": "https://pub.dartlang.org/packages/openapi/versions/1.0.0.tar.gz", + "api_data_url": "https://pub.dev/api/packages/openapi/versions/1.0.0", + "datasource_id": "pubspec_yaml", + "purl": "pkg:dart/openapi@1.0.0" + } + ], + "for_packages": [ + "pkg:dart/openapi@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/pubspec-lock-expected.json b/tests/packagedcode/data/plugin/pubspec-lock-expected.json index 77e7665cc05..fa3dca4daf7 100644 --- a/tests/packagedcode/data/plugin/pubspec-lock-expected.json +++ b/tests/packagedcode/data/plugin/pubspec-lock-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/dart", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/dart?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/_fe_analyzer_shared@22.0.0", @@ -41,9 +42,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/_fe_analyzer_shared@22.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/_fe_analyzer_shared@22.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/analyzer@1.7.1", @@ -53,9 +55,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/analyzer@1.7.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/analyzer@1.7.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/args@2.1.1", @@ -65,9 +68,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/args@2.1.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/args@2.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/async@2.7.0", @@ -77,9 +81,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/async@2.7.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/async@2.7.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/boolean_selector@2.1.0", @@ -89,9 +94,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/boolean_selector@2.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/boolean_selector@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/charcode@1.3.1", @@ -101,9 +107,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/charcode@1.3.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/charcode@1.3.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/cli_util@0.3.2", @@ -113,9 +120,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/cli_util@0.3.2", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/cli_util@0.3.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/collection@1.15.0", @@ -125,9 +133,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/collection@1.15.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/collection@1.15.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/convert@3.0.1", @@ -137,9 +146,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/convert@3.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/convert@3.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/coverage@1.0.3", @@ -149,9 +159,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/coverage@1.0.3", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/coverage@1.0.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/crypto@3.0.1", @@ -161,9 +172,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/crypto@3.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/crypto@3.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/csslib@0.17.0", @@ -173,9 +185,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/csslib@0.17.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/csslib@0.17.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/dartdoc@1.0.0", @@ -185,9 +198,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/dartdoc@1.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/dartdoc@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/file@6.1.2", @@ -197,9 +211,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/file@6.1.2", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/file@6.1.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/frontend_server_client@2.1.0", @@ -209,9 +224,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/frontend_server_client@2.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/frontend_server_client@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/glob@2.0.1", @@ -221,9 +237,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/glob@2.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/glob@2.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/html@0.15.0", @@ -233,9 +250,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/html@0.15.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/html@0.15.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/http@0.13.3", @@ -245,9 +263,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/http@0.13.3", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/http@0.13.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/http_multi_server@3.0.1", @@ -257,9 +276,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/http_multi_server@3.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/http_multi_server@3.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/http_parser@4.0.0", @@ -269,9 +289,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/http_parser@4.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/http_parser@4.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/io@1.0.2", @@ -281,9 +302,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/io@1.0.2", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/io@1.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/js@0.6.3", @@ -293,9 +315,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/js@0.6.3", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/js@0.6.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/json_annotation@4.0.1", @@ -305,9 +328,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/json_annotation@4.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/json_annotation@4.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/logging@1.0.1", @@ -317,9 +341,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/logging@1.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/logging@1.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/markdown@4.0.0", @@ -329,9 +354,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/markdown@4.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/markdown@4.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/matcher@0.12.10", @@ -341,9 +367,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/matcher@0.12.10", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/matcher@0.12.10?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/meta@1.3.0", @@ -353,9 +380,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/meta@1.3.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/meta@1.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/mime@1.0.0", @@ -365,9 +393,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/mime@1.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/mime@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/node_preamble@2.0.1", @@ -377,9 +406,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/node_preamble@2.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/node_preamble@2.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/package_config@2.0.0", @@ -389,9 +419,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/package_config@2.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/package_config@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/path@1.8.0", @@ -401,9 +432,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/path@1.8.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/path@1.8.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/pedantic@1.11.1", @@ -413,9 +445,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/pedantic@1.11.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/pedantic@1.11.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/pool@1.5.0", @@ -425,9 +458,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/pool@1.5.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/pool@1.5.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/pub_dartdoc_data@0.0.0", @@ -437,9 +471,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/pub_dartdoc_data@0.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/pub_dartdoc_data@0.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/pub_semver@2.0.0", @@ -449,9 +484,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/pub_semver@2.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/pub_semver@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/shelf@1.1.4", @@ -461,9 +497,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/shelf@1.1.4", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/shelf@1.1.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/shelf_packages_handler@3.0.0", @@ -473,9 +510,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/shelf_packages_handler@3.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/shelf_packages_handler@3.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/shelf_static@1.0.0", @@ -485,9 +523,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/shelf_static@1.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/shelf_static@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/shelf_web_socket@1.0.1", @@ -497,9 +536,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/shelf_web_socket@1.0.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/shelf_web_socket@1.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/source_map_stack_trace@2.1.0", @@ -509,9 +549,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/source_map_stack_trace@2.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/source_map_stack_trace@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/source_maps@0.10.10", @@ -521,9 +562,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/source_maps@0.10.10", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/source_maps@0.10.10?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/source_span@1.8.1", @@ -533,9 +575,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/source_span@1.8.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/source_span@1.8.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/stack_trace@1.10.0", @@ -545,9 +588,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/stack_trace@1.10.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/stack_trace@1.10.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/stream_channel@2.1.0", @@ -557,9 +601,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/stream_channel@2.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/stream_channel@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/string_scanner@1.1.0", @@ -569,9 +614,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/string_scanner@1.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/string_scanner@1.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/tar@0.4.0", @@ -581,9 +627,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/tar@0.4.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/tar@0.4.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/term_glyph@1.2.0", @@ -593,9 +640,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/term_glyph@1.2.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/term_glyph@1.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/test@1.17.9", @@ -605,9 +653,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/test@1.17.9", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/test@1.17.9?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/test_api@0.4.1", @@ -617,9 +666,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/test_api@0.4.1", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/test_api@0.4.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/test_core@0.3.29", @@ -629,9 +679,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/test_core@0.3.29", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/test_core@0.3.29?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/typed_data@1.3.0", @@ -641,9 +692,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/typed_data@1.3.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/typed_data@1.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/vm_service@7.1.0", @@ -653,9 +705,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/vm_service@7.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/vm_service@7.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/watcher@1.0.0", @@ -665,9 +718,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/watcher@1.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/watcher@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/web_socket_channel@2.1.0", @@ -677,9 +731,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/web_socket_channel@2.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/web_socket_channel@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/webkit_inspection_protocol@1.0.0", @@ -689,9 +744,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/webkit_inspection_protocol@1.0.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/webkit_inspection_protocol@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" }, { "purl": "pkg:pubspec/yaml@3.1.0", @@ -701,9 +757,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pubspec/yaml@3.1.0", - "for_package": null, - "lockfile": "dart-pubspec.lock" + "dependency_uid": "pkg:pubspec/yaml@3.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "dart-pubspec.lock", + "datasource_id": "pubspec_lock" } ], "packages": [], @@ -738,8 +795,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1256,10 +1313,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pubspec_lock", + "purl": null } ], "for_packages": [], diff --git a/tests/packagedcode/data/plugin/python-package-expected.json b/tests/packagedcode/data/plugin/python-package-expected.json index 6c21ad06e36..4e25cb64fb0 100644 --- a/tests/packagedcode/data/plugin/python-package-expected.json +++ b/tests/packagedcode/data/plugin/python-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/atomicwrites@1.1.5", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/atomicwrites@1.1.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/attrs@18.1.0", @@ -41,9 +42,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/attrs@18.1.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/attrs@18.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/contextlib2@0.5.5", @@ -53,9 +55,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/contextlib2@0.5.5", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/contextlib2@0.5.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/coverage@4.5.1", @@ -65,9 +68,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/coverage@4.5.1", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/coverage@4.5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/funcsigs@1.0.2", @@ -77,9 +81,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/funcsigs@1.0.2", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/funcsigs@1.0.2?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/mock@2.0.0", @@ -89,9 +94,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/mock@2.0.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/mock@2.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/more-itertools@4.2.0", @@ -101,9 +107,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/more-itertools@4.2.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/more-itertools@4.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pbr@4.2.0", @@ -113,9 +120,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pbr@4.2.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pbr@4.2.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pluggy@0.6.0", @@ -125,9 +133,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pluggy@0.6.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pluggy@0.6.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/py@1.5.4", @@ -137,9 +146,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/py@1.5.4", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/py@1.5.4?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pytest@3.6.3", @@ -149,9 +159,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pytest@3.6.3", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pytest@3.6.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pytest-cov@2.5.1", @@ -161,9 +172,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pytest-cov@2.5.1", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pytest-cov@2.5.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pytest-vcr@0.3.0", @@ -173,9 +185,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pytest-vcr@0.3.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pytest-vcr@0.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/pyyaml@3.13", @@ -185,9 +198,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/pyyaml@3.13", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/pyyaml@3.13?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/six@1.11.0", @@ -197,9 +211,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/six@1.11.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/six@1.11.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/vcrpy@1.13.0", @@ -209,9 +224,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/vcrpy@1.13.0", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/vcrpy@1.13.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/wrapt@1.10.11", @@ -221,9 +237,10 @@ "is_optional": false, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/wrapt@1.10.11", - "for_package": "pkg:pypi/atomicwrites@1.2.1", - "lockfile": "atomicwrites/Pipfile.lock" + "dependency_uid": "pkg:pypi/wrapt@1.10.11?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "atomicwrites/Pipfile.lock", + "datasource_id": "pipfile_lock" }, { "purl": "pkg:pypi/setuptools", @@ -233,9 +250,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/setuptools", - "for_package": null, - "lockfile": "requirements/requirements.txt" + "dependency_uid": "pkg:pypi/setuptools?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "requirements/requirements.txt", + "datasource_id": "pip_requirements" }, { "purl": "pkg:pypi/nose", @@ -245,9 +263,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/nose", - "for_package": null, - "lockfile": "requirements/requirements.txt" + "dependency_uid": "pkg:pypi/nose?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "requirements/requirements.txt", + "datasource_id": "pip_requirements" }, { "purl": "pkg:pypi/chardet", @@ -257,9 +276,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:pypi/chardet", - "for_package": null, - "lockfile": "requirements/requirements.txt" + "dependency_uid": "pkg:pypi/chardet?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": null, + "datafile_path": "requirements/requirements.txt", + "datasource_id": "pip_requirements" } ], "packages": [ @@ -299,20 +319,19 @@ "license": "Simplified BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/arpy@0.1.1", - "package_data_files": [ + "repository_homepage_url": "https://pypi.org/project/arpy", + "repository_download_url": "https://pypi.org/packages/source/a/arpy/arpy-0.1.1.tar.gz", + "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json", + "package_uid": "pkg:pypi/arpy@0.1.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "arpy/setup.py" ], - "files": [ - "arpy/setup.py" + "datasource_ids": [ + "pypi_setup_py" ], - "purl": "pkg:pypi/arpy@0.1.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/a/arpy/arpy-0.1.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json" + "purl": "pkg:pypi/arpy@0.1.1" }, { "type": "pypi", @@ -347,13 +366,13 @@ "size": null, "sha1": null, "md5": null, - "sha256": "6e45251662433bf51f96fb3d2204b65416fece329d60e6235c0f0edc416cfe24", + "sha256": null, "sha512": null, "bug_tracking_url": null, "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -361,22 +380,59 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/atomicwrites@1.2.1", - "package_data_files": [ - "atomicwrites/atomicwrites-1.2.1-py2.py3-none-any.whl", - "atomicwrites/Pipfile.lock" + "repository_homepage_url": "https://pypi.org/project/atomicwrites", + "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", + "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json", + "package_uid": "pkg:pypi/atomicwrites@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "atomicwrites/atomicwrites-1.2.1-py2.py3-none-any.whl" ], - "files": [ - "atomicwrites/atomicwrites-1.2.1-py2.py3-none-any.whl", - "atomicwrites/Pipfile.lock" + "datasource_ids": [ + "pypi_wheel" ], - "purl": "pkg:pypi/atomicwrites@1.2.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json" + "purl": "pkg:pypi/atomicwrites@1.2.1" + }, + { + "type": "chef", + "namespace": null, + "name": "six", + "version": "1.10.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Ruby", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/download", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "license_expression": "mit", + "declared_license": "MIT", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/", + "repository_download_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/download", + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/six/versions/1.10.0", + "package_uid": "pkg:chef/six@1.10.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "Six/metadata.json" + ], + "datasource_ids": [ + "chef_cookbook_metadata_json" + ], + "purl": "pkg:chef/six@1.10.0" }, { "type": "pypi", @@ -415,7 +471,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -423,65 +479,19 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/six@1.10.0", - "package_data_files": [ - "Six/METADATA" - ], - "files": [ - "Six/DESCRIPTION.rst", - "Six/METADATA", - "Six/metadata.json" - ], - "purl": "pkg:pypi/six@1.10.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/six", "repository_download_url": "https://pypi.org/packages/source/s/six/six-1.10.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/six/1.10.0/json" - }, - { - "type": "chef", - "namespace": null, - "name": "six", - "version": "1.10.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "Ruby", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/download", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "mit", - "declared_license": "MIT", - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:chef/six@1.10.0", - "package_data_files": [ - "Six/metadata.json" + "api_data_url": "https://pypi.org/pypi/six/1.10.0/json", + "package_uid": "pkg:pypi/six@1.10.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "Six/Six.dist-info/METADATA" ], - "files": [ - "Six/DESCRIPTION.rst", - "Six/METADATA", - "Six/metadata.json" + "datasource_ids": [ + "pypi_wheel_metadata" ], - "purl": "pkg:chef/six@1.10.0", - "repository_homepage_url": null, - "repository_download_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/six/versions/1.10.0" + "purl": "pkg:pypi/six@1.10.0" }, { "type": "pypi", @@ -514,25 +524,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": "bsd-new", "declared_license": { "license": "BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/ticketimport@0.7a", - "package_data_files": [ + "repository_homepage_url": "https://pypi.org/project/TicketImport", + "repository_download_url": "https://pypi.org/packages/source/T/TicketImport/TicketImport-0.7a.tar.gz", + "api_data_url": "https://pypi.org/pypi/TicketImport/0.7a/json", + "package_uid": "pkg:pypi/ticketimport@0.7a?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "TicketImport/PKG-INFO" ], - "files": [ - "TicketImport/PKG-INFO" + "datasource_ids": [ + "pypi_sdist_pkginfo" ], - "purl": "pkg:pypi/ticketimport@0.7a", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": "https://pypi.org/packages/source/T/TicketImport/TicketImport-0.7a.tar.gz", - "api_data_url": "https://pypi.org/pypi/TicketImport/0.7a/json" + "purl": "pkg:pypi/ticketimport@0.7a" } ], "files": [ @@ -547,14 +556,18 @@ "path": "Six/DESCRIPTION.rst", "type": "file", "package_data": [], - "for_packages": [ - "pkg:pypi/six@1.10.0", - "pkg:chef/six@1.10.0" - ], + "for_packages": [], "scan_errors": [] }, { - "path": "Six/METADATA", + "path": "Six/Six.dist-info", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "Six/Six.dist-info/METADATA", "type": "file", "package_data": [ { @@ -594,7 +607,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -602,19 +615,19 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/six@1.10.0", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/six", "repository_download_url": "https://pypi.org/packages/source/s/six/six-1.10.0.tar.gz", - "api_data_url": "https://pypi.org/pypi/six/1.10.0/json" + "api_data_url": "https://pypi.org/pypi/six/1.10.0/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/six@1.10.0" } ], "for_packages": [ - "pkg:pypi/six@1.10.0", - "pkg:chef/six@1.10.0" + "pkg:pypi/six@1.10.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -648,19 +661,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:chef/six@1.10.0", - "repository_homepage_url": null, + "repository_homepage_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/", "repository_download_url": "https://supermarket.chef.io/cookbooks/six/versions/1.10.0/download", - "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/six/versions/1.10.0" + "api_data_url": "https://supermarket.chef.io/api/v1/cookbooks/six/versions/1.10.0", + "datasource_id": "chef_cookbook_metadata_json", + "purl": "pkg:chef/six@1.10.0" } ], "for_packages": [ - "pkg:pypi/six@1.10.0", - "pkg:chef/six@1.10.0" + "pkg:chef/six@1.10.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -706,23 +719,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": "bsd-new", "declared_license": { "license": "BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/ticketimport@0.7a", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/TicketImport", "repository_download_url": "https://pypi.org/packages/source/T/TicketImport/TicketImport-0.7a.tar.gz", - "api_data_url": "https://pypi.org/pypi/TicketImport/0.7a/json" + "api_data_url": "https://pypi.org/pypi/TicketImport/0.7a/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/ticketimport@0.7a" } ], "for_packages": [ - "pkg:pypi/ticketimport@0.7a" + "pkg:pypi/ticketimport@0.7a?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -768,23 +782,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-simplified", + "license_expression": null, "declared_license": { "license": "Simplified BSD" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/arpy@0.1.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/arpy", "repository_download_url": "https://pypi.org/packages/source/a/arpy/arpy-0.1.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json" + "api_data_url": "https://pypi.org/pypi/arpy/0.1.1/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/arpy@0.1.1" } ], "for_packages": [ - "pkg:pypi/arpy@0.1.1" + "pkg:pypi/arpy@0.1.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -825,8 +840,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -983,15 +998,14 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pipfile_lock", + "purl": null } ], - "for_packages": [ - "pkg:pypi/atomicwrites@1.2.1" - ], + "for_packages": [], "scan_errors": [] }, { @@ -1037,7 +1051,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": "mit AND mit", "declared_license": { "license": "MIT", "classifiers": [ @@ -1045,18 +1059,65 @@ ] }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [ + { + "path": "atomicwrites/__init__.py", + "size": 6428, + "sha1": null, + "md5": null, + "sha256": "e99fd5a033165d8a870e730383a30199798cc5fd31194cec120b616d8f59c71c", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/METADATA", + "size": 5535, + "sha1": null, + "md5": null, + "sha256": "0289c810b3daea2a81801eac17154b464b8eb7b34c5ae2c8de6706d18205a358", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/RECORD", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/WHEEL", + "size": 110, + "sha1": null, + "md5": null, + "sha256": "81dbae3f206f149412434cddcb117b934cf29c35db21bbe0e59047a17ba6e6e9", + "sha512": null, + "extra_data": {} + }, + { + "path": "atomicwrites-1.2.1.dist-info/top_level.txt", + "size": 13, + "sha1": null, + "md5": null, + "sha256": "92ceb8cca55492b97666bacfd38e82b32b5795219ff202c6f887285e93727a87", + "sha512": null, + "extra_data": {} + } + ], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/atomicwrites@1.2.1", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/atomicwrites", "repository_download_url": "https://pypi.org/packages/source/a/atomicwrites/atomicwrites-1.2.1.tar.gz", - "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json" + "api_data_url": "https://pypi.org/pypi/atomicwrites/1.2.1/json", + "datasource_id": "pypi_wheel", + "purl": "pkg:pypi/atomicwrites@1.2.1" } ], "for_packages": [ - "pkg:pypi/atomicwrites@1.2.1" + "pkg:pypi/atomicwrites@1.2.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -1097,8 +1158,8 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1129,10 +1190,11 @@ "resolved_package": {} } ], - "purl": null, "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "pip_requirements", + "purl": null } ], "for_packages": [], diff --git a/tests/packagedcode/data/plugin/rpm-package-expected.json b/tests/packagedcode/data/plugin/rpm-package-expected.json index 4d241385fc6..cacd3b6428b 100644 --- a/tests/packagedcode/data/plugin/rpm-package-expected.json +++ b/tests/packagedcode/data/plugin/rpm-package-expected.json @@ -48,22 +48,21 @@ "license_expression": "gpl-1.0-plus", "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:rpm/alfandega@2.0-1.7.3?arch=src" ], "extra_data": {}, - "package_uuid": "pkg:rpm/alfandega@2.0-1.7.3", - "package_data_files": [ + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:rpm/alfandega@2.0-1.7.3?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "alfandega-2.0-1.7.3.noarch.rpm" ], - "files": [ - "alfandega-2.0-1.7.3.noarch.rpm" + "datasource_ids": [ + "rpm_archive" ], - "purl": "pkg:rpm/alfandega@2.0-1.7.3", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:rpm/alfandega@2.0-1.7.3" } ], "files": [ @@ -94,23 +93,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "gpl-1.0-plus", + "license_expression": null, "declared_license": "GPL", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:rpm/alfandega@2.0-1.7.3?arch=src" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:rpm/alfandega@2.0-1.7.3", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "rpm_archive", + "purl": "pkg:rpm/alfandega@2.0-1.7.3" } ], "for_packages": [ - "pkg:rpm/alfandega@2.0-1.7.3" + "pkg:rpm/alfandega@2.0-1.7.3?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/packagedcode/data/plugin/rubygems-package-expected.json b/tests/packagedcode/data/plugin/rubygems-package-expected.json index 10e0b4f39d4..032eb83f10d 100644 --- a/tests/packagedcode/data/plugin/rubygems-package-expected.json +++ b/tests/packagedcode/data/plugin/rubygems-package-expected.json @@ -29,9 +29,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/ffi-rzmq", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/ffi-rzmq?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/ffi", @@ -41,9 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/ffi", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/ffi?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/multi_json", @@ -53,9 +55,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/multi_json", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/multi_json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/tnetstring", @@ -65,9 +68,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/tnetstring", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/tnetstring?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/rack", @@ -77,9 +81,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/rack", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/rack?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/rake", @@ -89,9 +94,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/rake", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/rake?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/minitest", @@ -101,9 +107,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:gem/minitest", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/minitest?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/mocha", @@ -113,9 +120,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/mocha", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/mocha?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/bbq", @@ -125,9 +133,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:gem/bbq", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/bbq?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/capybara-mechanize", @@ -137,9 +146,10 @@ "is_optional": true, "is_resolved": true, "resolved_package": {}, - "dependency_uuid": "pkg:gem/capybara-mechanize", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/capybara-mechanize?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/activesupport", @@ -149,9 +159,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/activesupport", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/activesupport?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/yard", @@ -161,9 +172,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/yard", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/yard?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" }, { "purl": "pkg:gem/kramdown", @@ -173,9 +185,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:gem/kramdown", - "for_package": "pkg:gem/m2r@2.1.0", - "lockfile": "m2r-2.1.0.gem" + "dependency_uid": "pkg:gem/kramdown?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "m2r-2.1.0.gem", + "datasource_id": "gem_archive" } ], "packages": [ @@ -236,21 +249,19 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:gem/m2r@2.1.0", - "package_data_files": [ + "repository_homepage_url": "https://rubygems.org/gems/m2r/versions/2.1.0", + "repository_download_url": "https://rubygems.org/downloads/m2r-2.1.0.gem", + "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json", + "package_uid": "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "m2r-2.1.0.gem" ], - "files": [ - "m2r-2.1.0.gem", - "m2r-2.1.0.gem.json" + "datasource_ids": [ + "gem_archive" ], - "purl": "pkg:gem/m2r@2.1.0", - "repository_homepage_url": "https://rubygems.org/gems/m2r/versions/2.1.0", - "repository_download_url": "https://rubygems.org/downloads/m2r-2.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json" + "purl": "pkg:gem/m2r@2.1.0" } ], "files": [ @@ -315,8 +326,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -437,14 +448,15 @@ "resolved_package": {} } ], - "purl": "pkg:gem/m2r@2.1.0", "repository_homepage_url": "https://rubygems.org/gems/m2r/versions/2.1.0", "repository_download_url": "https://rubygems.org/downloads/m2r-2.1.0.gem", - "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json" + "api_data_url": "https://rubygems.org/api/v2/rubygems/m2r/versions/2.1.0.json", + "datasource_id": "gem_archive", + "purl": "pkg:gem/m2r@2.1.0" } ], "for_packages": [ - "pkg:gem/m2r@2.1.0" + "pkg:gem/m2r@2.1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -452,9 +464,7 @@ "path": "m2r-2.1.0.gem.json", "type": "file", "package_data": [], - "for_packages": [ - "pkg:gem/m2r@2.1.0" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/sys-package-expected.json b/tests/packagedcode/data/plugin/sys-package-expected.json index 4b280754c16..9e8de1ee1e5 100644 --- a/tests/packagedcode/data/plugin/sys-package-expected.json +++ b/tests/packagedcode/data/plugin/sys-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Microsoft\u00ae Windows\u00ae Operating System", - "version": "10.0.17763.1697", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "Export driver for kernel mode TPM API", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697", - "package_data_files": [ - "tbs.sys" - ], - "files": [ - "tbs.sys" - ], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "tbs.sys", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697" } ], - "for_packages": [ - "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.17763.1697" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/tlb-package-expected.json b/tests/packagedcode/data/plugin/tlb-package-expected.json index d513d466c24..a2cd5a25416 100644 --- a/tests/packagedcode/data/plugin/tlb-package-expected.json +++ b/tests/packagedcode/data/plugin/tlb-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Microsoft\u00ae Windows\u00ae Operating System", - "version": "10.0.18362.1256", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "STDOLE2.TLB", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "package_data_files": [ - "stdole2.tlb" - ], - "files": [ - "stdole2.tlb" - ], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "stdole2.tlb", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" } ], - "for_packages": [ - "pkg:winexe/Microsoft%C2%AE%20Windows%C2%AE%20Operating%20System@10.0.18362.1256" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/win_pe-package-expected.json b/tests/packagedcode/data/plugin/win_pe-package-expected.json index 037f86327fd..a7d44dd8d6f 100644 --- a/tests/packagedcode/data/plugin/win_pe-package-expected.json +++ b/tests/packagedcode/data/plugin/win_pe-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "File", - "version": "5.03.3414.16721", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "File: determine file type", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "GnuWin32 ", - "email": null, - "url": null - } - ], - "keywords": [], - "homepage_url": "http://www.darwinsys.com/file/", - "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": "\u00a9 2009 Ian F. Darwin", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 2009 Ian F. Darwin", - "LegalTrademarks": "GnuWin32\u00ae, File\u00ae, file\u00ae", - "License": "Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994-2004 Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/File@5.03.3414.16721", - "package_data_files": [ - "file.exe" - ], - "files": [ - "file.exe" - ], - "purl": "pkg:winexe/File@5.03.3414.16721", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "file.exe", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 2009 Ian F. Darwin", - "license_expression": "unknown", + "license_expression": "bsd-simplified-darwin AND unknown", "declared_license": { "LegalCopyright": "\u00a9 2009 Ian F. Darwin", "LegalTrademarks": "GnuWin32\u00ae, File\u00ae, file\u00ae", "License": "Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994-2004 Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/File@5.03.3414.16721", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/File@5.03.3414.16721" } ], - "for_packages": [ - "pkg:winexe/File@5.03.3414.16721" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/plugin/winmd-package-expected.json b/tests/packagedcode/data/plugin/winmd-package-expected.json index fee3c58d84f..72a8b6241b3 100644 --- a/tests/packagedcode/data/plugin/winmd-package-expected.json +++ b/tests/packagedcode/data/plugin/winmd-package-expected.json @@ -21,61 +21,7 @@ } ], "dependencies": [], - "packages": [ - { - "type": "winexe", - "namespace": null, - "name": "Windows SDK", - "version": "10.0.10011.16384", - "qualifiers": {}, - "subpath": null, - "primary_language": null, - "description": "Windows SDK metadata", - "release_date": null, - "parties": [ - { - "type": "organization", - "role": "author", - "name": "Microsoft Corporation", - "email": null, - "url": null - } - ], - "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": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", - "declared_license": { - "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "LegalTrademarks": "", - "License": null - }, - "notice_text": null, - "contains_source_code": null, - "source_packages": [], - "extra_data": {}, - "package_uuid": "pkg:winexe/Windows%20SDK@10.0.10011.16384", - "package_data_files": [ - "Windows.AI.winmd" - ], - "files": [ - "Windows.AI.winmd" - ], - "purl": "pkg:winexe/Windows%20SDK@10.0.10011.16384", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null - } - ], + "packages": [], "files": [ { "path": "Windows.AI.winmd", @@ -112,26 +58,25 @@ "code_view_url": null, "vcs_url": null, "copyright": "\u00a9 Microsoft Corporation. All rights reserved.", - "license_expression": "unknown", + "license_expression": "unknown AND unknown", "declared_license": { "LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.", "LegalTrademarks": "", "License": null }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:winexe/Windows%20SDK@10.0.10011.16384", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "windows_executable", + "purl": "pkg:winexe/Windows%20SDK@10.0.10011.16384" } ], - "for_packages": [ - "pkg:winexe/Windows%20SDK@10.0.10011.16384" - ], + "for_packages": [], "scan_errors": [] } ] diff --git a/tests/packagedcode/data/recon/pypi/Six/METADATA b/tests/packagedcode/data/recon/pypi/Six/Six.dist-info/METADATA similarity index 100% rename from tests/packagedcode/data/recon/pypi/Six/METADATA rename to tests/packagedcode/data/recon/pypi/Six/Six.dist-info/METADATA diff --git a/tests/packagedcode/test_package_instance.py b/tests/packagedcode/test_package_instance.py index 64193265367..10f74ffd82a 100644 --- a/tests/packagedcode/test_package_instance.py +++ b/tests/packagedcode/test_package_instance.py @@ -11,11 +11,12 @@ import json import os -from packagedcode.pypi import PythonPackage +from packagedcode import models from packages_test_utils import PackageTester from scancode.cli_test_utils import check_json_scan from scancode.cli_test_utils import run_scan_click from scancode_config import REGEN_TEST_FIXTURES +import pytest class TestPackageAndDependency(PackageTester): @@ -26,47 +27,21 @@ def test_package_instance_scan_python(self): result_file = self.get_temp_file('json') expected_file = self.get_test_loc('instance/python-package-instance-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, remove_instance_uuid=True) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, remove_uuid=True) # Note that this will fail even at regen True. # Will pass on the next regen False run. - # ToDo: Use moking instead + # ToDo: Use mocking instead def test_package_instance_scan_python_with_uuid(self): test_dir = self.get_test_loc('instance/pypi') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('instance/python-package-instance-expected-with-uuid.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, ignore_instance_uuid=True) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, remove_uuid=True) def test_package_instance_scan_python_with_test_manifests(self): test_dir = self.get_test_loc('instance/pypi-with-test-manifests') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('instance/python-package-instance-expected-with-test-manifests.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, remove_instance_uuid=True) - - def test_package_data_merge_generic(self, regen=REGEN_TEST_FIXTURES): - input_file = self.get_test_loc('instance/python-manifests-click-scanned.json') - expected_file = self.get_test_loc('instance/python-manifests-click-scanned-result.json') - - with io.open(input_file, encoding='utf-8') as res: - manifests = json.load(res) - - pk_instance = PythonPackage() - for manifest in manifests: - pk_instance.update(manifest) - - self.check_package(pk_instance, expected_file, regen) - - def test_package_data_merge_with_dependencies(self, regen=REGEN_TEST_FIXTURES): - input_file = self.get_test_loc('instance/python-manifests-atomicwrites-scanned.json') - expected_file = self.get_test_loc('instance/python-manifests-atomicwrites-scanned-result.json') - - with io.open(input_file, encoding='utf-8') as res: - manifests = json.load(res) - - pk_instance = PythonPackage() - for manifest in manifests: - pk_instance.update(manifest) - - self.check_package(pk_instance, expected_file, regen) + check_json_scan(expected_file, result_file, regen=REGEN_TEST_FIXTURES, remove_uuid=True) diff --git a/tests/packagedcode/test_package_models.py b/tests/packagedcode/test_package_models.py index 1aa57fdd43d..825bdeb4557 100644 --- a/tests/packagedcode/test_package_models.py +++ b/tests/packagedcode/test_package_models.py @@ -9,9 +9,9 @@ import os.path +from packagedcode import misc from packagedcode import models -from packagedcode import PACKAGE_INSTANCE_CLASSES -from packagedcode import PACKAGE_DATA_CLASSES +from packagedcode import PACKAGE_DATAFILE_HANDLERS from packagedcode.models import PackageData from packagedcode.models import Party from packages_test_utils import PackageTester @@ -22,15 +22,17 @@ class TestModels(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') def test_Package_creation_and_dump(self): - package = models.AndroidApp(name='someAndroidPAcakge') + pd = misc.AndroidAppArchiveHandler.create_default_package_data( + name='someAndroidPAcakge', + ) expected = [ - ('type', u'android'), + ('type', 'android'), ('namespace', None), - ('name', u'someAndroidPAcakge'), + ('name', 'someAndroidPAcakge'), ('version', None), ('qualifiers', {}), ('subpath', None), - ('primary_language', u'Java'), + ('primary_language', 'Java'), ('description', None), ('release_date', None), ('parties', []), @@ -49,59 +51,47 @@ def test_Package_creation_and_dump(self): ('license_expression', None), ('declared_license', None), ('notice_text', None), - ('contains_source_code', None), ('source_packages', []), + ('file_references', []), ('extra_data', {}), ('dependencies', []), - ('purl', u'pkg:android/someAndroidPAcakge'), ('repository_homepage_url', None), ('repository_download_url', None), ('api_data_url', None), + ('datasource_id', 'android_apk'), + ('purl', 'pkg:android/someAndroidPAcakge'), ] - assert list(package.to_dict().items()) == expected + assert list(pd.to_dict().items()) == expected def test_Package_simple(self): package = PackageData( + datasource_id = 'rpm_archive', type='rpm', name='Sample', description='Some package', - parties=[Party( - name='Some Author', - role='author', - email='some@email.com' - ) - ], + parties=[Party(name='Some Author', role='author', email='some@email.com')], keywords=['some', 'keyword'], vcs_url='git+https://somerepo.com/that.git', - declared_license='apache-2.0' + declared_license='apache-2.0', ) expected_loc = 'models/simple-expected.json' - self.check_package(package, expected_loc, regen=REGEN_TEST_FIXTURES) + self.check_package_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) def test_Package_model_qualifiers_are_serialized_as_mappings(self): package = models.PackageData( - type='maven', - name='this', - version='23', - qualifiers=dict(this='that') + type='maven', name='this', version='23', qualifiers=dict(this='that') ) assert package.to_dict()['qualifiers'] == dict(this='that') def test_Package_model_qualifiers_are_kept_as_mappings(self): package = models.PackageData( - type='maven', - name='this', - version='23', - qualifiers=dict(this='that') + type='maven', name='this', version='23', qualifiers=dict(this='that') ) assert package.qualifiers == dict(this='that') def test_Package_model_qualifiers_are_converted_to_mappings(self): package = models.PackageData( - type='maven', - name='this', - version='23', - qualifiers='this=that' + type='maven', name='this', version='23', qualifiers='this=that' ) assert package.qualifiers == dict(this='that') @@ -117,13 +107,7 @@ def test_Package_full(self): description='Some package', size=12312312312, release_date='2012-10-21', - parties=[ - Party( - name='Some Author', - role='author', - email='some@email.com' - ) - ], + parties=[Party(name='Some Author', role='author', email='some@email.com')], keywords=['some', 'other', 'keyword'], homepage_url='http://homepage.com', download_url='http://homepage.com/dnl', @@ -138,82 +122,33 @@ def test_Package_full(self): license_expression='apache-2.0', declared_license=u'apache-2.0', notice_text='licensed under the apacche 2.0 \nlicense', - contains_source_code=True, - source_packages=[ - "pkg:maven/aspectj/aspectjtools@1.5.4?classifier=sources" - ], + source_packages=["pkg:maven/aspectj/aspectjtools@1.5.4?classifier=sources"], ) expected_loc = 'models/full-expected.json' - self.check_package(package, expected_loc, regen=REGEN_TEST_FIXTURES) - - def test_Package_get_package_resource_works_with_nested_packages_and_ignores(self): - from packagedcode import get_package_instance - from packagedcode import npm - from commoncode.resource import VirtualCodebase - scan_loc = self.get_test_loc('models/nested-npm-packages.json') - codebase = VirtualCodebase(scan_loc) - for resource in codebase.walk(): - for package_data in resource.packages: - package = get_package_instance(package_data) - assert isinstance(package, npm.NpmPackageData) - package_resources = list(package.get_package_resources(resource, codebase)) - assert any(r.name == 'package.json' for r in package_resources), resource.path - - -class TestManifestInstanceModels(PackageTester): - - def test_package_data_types(self): - check_package_data_classes() - - def test_package_instance_types(self): - check_package_instance_classes() - - -def check_package_instance_classes(): - """ - Check that we don't have two package instance classes with the same - default_type. - """ - package_instances_by_type = { - cls.default_type: cls - for cls in PACKAGE_INSTANCE_CLASSES - } - - if len(package_instances_by_type) != len(PACKAGE_INSTANCE_CLASSES): - seen_types = {} - for pt in PACKAGE_INSTANCE_CLASSES: - pk_instance = pt() - assert pk_instance.default_type - seen = seen_types.get(pk_instance.default_type) - if seen: - msg = ('Invalid duplicated packagedcode.Package types: ' - '"{}:{}" and "{}:{}" have the same type.' - .format(pk_instance.default_type, pk_instance.__name__, seen.default_type, seen.__name__,)) - raise Exception(msg) - else: - seen_types[pk_instance.default_type] = pk_instance - - -def check_package_data_classes(): - """ - Check that we don't have two package manifest classes with the same - package_data_type. - """ - package_data_by_type = { - cls.default_type: cls - for cls in PACKAGE_DATA_CLASSES - } - - if len(package_data_by_type) != len(PACKAGE_DATA_CLASSES): - seen_types = {} - for pmt in PACKAGE_DATA_CLASSES: - manifest = pmt() - assert manifest.package_data_type - seen = seen_types.get(manifest.package_data_type) - if seen: - msg = ('Invalid duplicated packagedcode.Package types: ' - '"{}:{}" and "{}:{}" have the same type.' - .format(manifest.package_data_type, manifest.__name__, seen.package_data_type, seen.__name__,)) - raise Exception(msg) - else: - seen_types[manifest.package_data_type] = manifest + self.check_package_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_package_data_datasource_id_are_unique(self): + """ + Check that we do not have two DataFileHandlers with the same + datasource_id and that all have one. + """ + seen = {} + for pdh in PACKAGE_DATAFILE_HANDLERS: + pdhid = pdh.datasource_id + assert pdhid + assert ( + pdh.datasource_id not in seen + ), f'Duplicated datasource_id: {pdh!r} with {seen[pdhid]!r}' + seen[pdh.datasource_id] = pdh + + def test_package_data_file_patterns_are_tuples(self): + """ + Check that all file patterns are tuples, as if they are + strings the matching will happen per character and will be + True for most of the cases. + """ + for pdh in PACKAGE_DATAFILE_HANDLERS: + if pdh.path_patterns: + assert type(pdh.path_patterns) == tuple, pdh + if pdh.filetypes: + assert type(pdh.filetypes) == tuple, pdh diff --git a/tests/packagedcode/test_plugin.py b/tests/packagedcode/test_plugin_package.py similarity index 78% rename from tests/packagedcode/test_plugin.py rename to tests/packagedcode/test_plugin_package.py index 727d44c2d5a..4bbb4886a22 100644 --- a/tests/packagedcode/test_plugin.py +++ b/tests/packagedcode/test_plugin_package.py @@ -21,193 +21,193 @@ class TestPlugins(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') - def test_package_list_command(self, regen=REGEN_TEST_FIXTURES): - expected_file = self.get_test_loc('plugin/help.txt') - result = run_scan_click(['--list-packages']) - if regen: - with open(expected_file, 'w') as ef: - ef.write(result.output) - assert result.output == open(expected_file).read() - - @skipIf(on_windows, 'somehow this fails on Windows') - def test_package_command_scan_python(self): - test_dir = self.get_test_loc('recon/pypi') - result_file = self.get_temp_file('json') - expected_file = self.get_test_loc('plugin/python-package-expected.json') - run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) - - def test_package_command_scan_maven(self): - test_dir = self.get_test_loc('maven2') - result_file = self.get_temp_file('json') - expected_file = self.get_test_loc('plugin/maven-package-expected.json') - run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) - def test_package_command_scan_about(self): test_dir = self.get_test_loc('about/aboutfiles/') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/about-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_bower(self): test_dir = self.get_test_loc('bower/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/bower-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_cargo(self): test_dir = self.get_test_loc('cargo/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/cargo-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_chef(self): test_dir = self.get_test_loc('chef/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/chef-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_conda(self): test_dir = self.get_test_loc('conda/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/conda-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_package_command_scan_cran_r_package(self): + test_dir = self.get_test_loc('cran/package') + result_file = self.get_temp_file('json') + expected_file = self.get_test_loc('plugin/cran-package-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) def test_package_command_scan_freebsd(self): test_dir = self.get_test_loc('freebsd/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/freebsd-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_haxe(self): test_dir = self.get_test_loc('haxe/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/haxe-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_package_command_scan_maven(self): + test_dir = self.get_test_loc('maven2') + result_file = self.get_temp_file('json') + expected_file = self.get_test_loc('plugin/maven-package-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) def test_package_command_scan_npm(self): test_dir = self.get_test_loc('npm/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/npm-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_nuget(self): test_dir = self.get_test_loc('nuget/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/nuget-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_opam(self): test_dir = self.get_test_loc('opam/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/opam-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_phpcomposer(self): test_dir = self.get_test_loc('phpcomposer/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/phpcomposer-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + @skipIf(on_windows, 'somehow this fails on Windows') + def test_package_command_scan_python(self): + test_dir = self.get_test_loc('recon/pypi') + result_file = self.get_temp_file('json') + expected_file = self.get_test_loc('plugin/python-package-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) def test_package_command_scan_rubygems(self): test_dir = self.get_test_loc('rubygems/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/rubygems-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_rpm(self): test_dir = self.get_test_loc('rpm/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/rpm-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) - - def test_package_command_scan_cran_r_package(self): - test_dir = self.get_test_loc('cran/package') - result_file = self.get_temp_file('json') - expected_file = self.get_test_loc('plugin/cran-package-expected.json') - run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_win_pe(self): test_dir = self.get_test_loc('win_pe/file.exe') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/win_pe-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_mum(self): test_dir = self.get_test_loc('windows/mum/test.mum') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/mum-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_pubspec_package(self): test_dir = self.get_test_loc('pubspec/specs/authors-pubspec.yaml') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/pubspec-expected.json', must_exist=False) run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_pubspec_lock_package(self): test_dir = self.get_test_loc('pubspec/locks/dart-pubspec.lock') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/pubspec-lock-expected.json', must_exist=False) run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_mui(self): test_dir = self.get_test_loc('win_pe/clfs.sys.mui') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/mui-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_mun(self): test_dir = self.get_test_loc('win_pe/crypt32.dll.mun') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/mun-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_com(self): test_dir = self.get_test_loc('win_pe/chcp.com') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/com-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_tlb(self): test_dir = self.get_test_loc('win_pe/stdole2.tlb') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/tlb-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_sys(self): test_dir = self.get_test_loc('win_pe/tbs.sys') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/sys-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_package_command_scan_winmd(self): test_dir = self.get_test_loc('win_pe/Windows.AI.winmd') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin/winmd-package-expected.json') run_scan_click(['--package', '--strip-root', '--processes', '-1', test_dir, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) + + def test_package_list_command(self, regen=REGEN_TEST_FIXTURES): + expected_file = self.get_test_loc('plugin/help.txt') + result = run_scan_click(['--list-packages']) + if regen: + with open(expected_file, 'w') as ef: + ef.write(result.output) + assert result.output == open(expected_file).read() diff --git a/tests/packagedcode/test_recognize.py b/tests/packagedcode/test_recognize.py index b419d5e0d1d..f0a6cd6f9f8 100644 --- a/tests/packagedcode/test_recognize.py +++ b/tests/packagedcode/test_recognize.py @@ -12,24 +12,12 @@ from commoncode.testcase import FileBasedTesting -import packagedcode +import pytest from packagedcode.recognize import recognize_package_data -from packagedcode import bower -from packagedcode import cargo -from packagedcode import freebsd -from packagedcode import haxe -from packagedcode import maven -from packagedcode import npm -from packagedcode import nuget -from packagedcode import opam -from packagedcode import phpcomposer -from packagedcode import rpm -from packagedcode import win_pe -from packagedcode import pypi -from packagedcode import golang from packagedcode import models +# TODO: this needs to be updated to use either a full scan of to use parse and assemble class TestRecognize(FileBasedTesting): test_data_dir = os.path.join(os.path.dirname(__file__), 'data') @@ -38,19 +26,19 @@ def test_recognize_package_data_deb(self): test_file = self.get_test_loc('archives/adduser_3.112ubuntu1_all.deb') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], packagedcode.debian.DebianPackage) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_rpm(self): test_file = self.get_test_loc('archives/alfandega-2.2-2.rh80.src.rpm') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], rpm.RpmPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_cab(self): test_file = self.get_test_loc('archives/basic.cab') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], packagedcode.models.CabPackage) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_rar(self): test_file = self.get_test_loc('archives/basic.rar') @@ -66,19 +54,19 @@ def test_recognize_package_data_gem(self): test_file = self.get_test_loc('archives/mysmallidea-address_standardization-0.4.1.gem') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], packagedcode.rubygems.RubyGemData) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_jar(self): test_file = self.get_test_loc('archives/simple.jar') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], packagedcode.models.JavaJar) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_iso(self): test_file = self.get_test_loc('archives/small.iso') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], packagedcode.models.IsoImagePackage) + assert isinstance(packages[0], models.PackageData) def test_recognize_package_data_does_not_recognize_plain_tarball(self): test_file = self.get_test_loc('archives/tarred_bzipped.tar.bz2') @@ -89,124 +77,124 @@ def test_recognize_maven_dot_pom(self): test_file = self.get_test_loc('m2/aspectj/aspectjrt/1.5.3/aspectjrt-1.5.3.pom') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], maven.MavenPomPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_maven_pom_xml(self): test_file = self.get_test_loc('maven2/pom-generic/pom.xml') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], maven.MavenPomPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_npm(self): test_file = self.get_test_loc('recon/package.json') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], npm.NpmPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_cargo(self): test_file = self.get_test_loc('recon/Cargo.toml') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], cargo.RustCargoCrate) + assert isinstance(packages[0], models.PackageData) def test_recognize_opam(self): test_file = self.get_test_loc('recon/opam') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], opam.OpamPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_opam1(self): test_file = self.get_test_loc('recon/base.opam') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], opam.OpamPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_composer(self): test_file = self.get_test_loc('recon/composer.json') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], phpcomposer.PhpComposerPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_haxe(self): test_file = self.get_test_loc('recon/haxelib.json') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], haxe.HaxePackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_freebsd(self): test_file = self.get_test_loc('freebsd/multi_license/+COMPACT_MANIFEST') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], freebsd.FreeBSDPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_nuget(self): test_file = self.get_test_loc('recon/bootstrap.nuspec') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], nuget.NugetPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_winexe(self): test_file = self.get_test_loc('win_pe/tre4.dll') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], win_pe.WindowsExecutableData) + assert isinstance(packages[0], models.PackageData) def test_recognize_bower(self): test_file = self.get_test_loc('bower/basic/bower.json') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], bower.BowerPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_cpan(self): test_file = self.get_test_loc('cpan/MANIFEST') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], models.CpanModule) + assert isinstance(packages[0], models.PackageData) def test_recognize_python2(self): test_file = self.get_test_loc('recon/pypi/atomicwrites/atomicwrites-1.2.1-py2.py3-none-any.whl') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_python3(self): - test_file = self.get_test_loc('recon/pypi/Six/METADATA') + test_file = self.get_test_loc('recon/pypi/Six/Six.dist-info/METADATA') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_python5(self): test_file = self.get_test_loc('recon/pypi/TicketImport/PKG-INFO') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_python6(self): test_file = self.get_test_loc('recon/pypi/arpy/setup.py') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_python7(self): test_file = self.get_test_loc('recon/pypi/atomicwrites/Pipfile.lock') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_python8(self): test_file = self.get_test_loc('recon/pypi/requirements/requirements.txt') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], pypi.PythonPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_go_mod(self): test_file = self.get_test_loc('golang/gomod/kingpin/go.mod') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], golang.GolangPackageData) + assert isinstance(packages[0], models.PackageData) def test_recognize_go_sum(self): test_file = self.get_test_loc('golang/gosum/sample1/go.sum') packages = recognize_package_data(test_file) assert packages - assert isinstance(packages[0], golang.GolangPackageData) + assert isinstance(packages[0], models.PackageData) From b5a126a32407861cdd4028e174eeb05662e5b248 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:33:57 +0200 Subject: [PATCH 34/36] Align CLI and summary code with packagedcode * Adopt new handler style and top level packages Signed-off-by: Philippe Ombredanne --- src/summarycode/classify.py | 116 +- src/summarycode/plugin_consolidate.py | 7 +- src/summarycode/score.py | 106 +- src/summarycode/summarizer.py | 224 +- .../data/composer/composer.expected.json | 82 +- tests/scancode/data/help/help.txt | 5 +- .../component-package-build-expected.json | 6 - .../component-package-expected.json | 4 - ...t-counted-in-license-holders-expected.json | 4 - .../package-fileset-expected.json | 4 - .../package-manifest-expected.json | 4 - ...-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json | 28 +- tests/scancode/test_cli.py | 4 +- .../data/full_summary/summary.expected.json | 8695 +++++++++++++ .../summary_by_facet.expected.json | 9497 +++++++++++++++ .../summary_details.expected.json | 10162 ++++++++++++++++ tests/summarycode/data/packages/expected.json | 1756 +++ .../component-package-build-expected.json | 89 +- .../component-package-expected.json | 56 +- .../node_modules/bar/package.json | 5 - .../foo/node_modules/bar/package.json | 5 - .../node_modules/foo/package.json | 5 - .../nested-packages/package.json | 5 - ...t-counted-in-license-holders-expected.json | 41 +- .../package-fileset-expected.json | 41 +- .../package-manifest-expected.json | 26 +- .../plugin_consolidate/zlib-expected.json | 2 - .../data/plugin_consolidate/zlib.json | 2 - .../multiple_package_data.expected.json | 85 +- .../with_package_data.expected.json | 45 +- .../full_tallies/tallies.expected.json | 690 +- .../tallies_by_facet.expected.json | 692 +- .../tallies_details.expected.json | 690 +- .../data/tallies/packages/expected.json | 517 +- tests/summarycode/test_plugin_consolidate.py | 40 +- tests/summarycode/test_summarizer.py | 20 +- tests/summarycode/test_tallies.py | 10 +- 37 files changed, 31901 insertions(+), 1869 deletions(-) create mode 100644 tests/summarycode/data/full_summary/summary.expected.json create mode 100644 tests/summarycode/data/full_summary/summary_by_facet.expected.json create mode 100644 tests/summarycode/data/full_summary/summary_details.expected.json create mode 100644 tests/summarycode/data/packages/expected.json delete mode 100644 tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/bar/package.json delete mode 100644 tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/node_modules/bar/package.json delete mode 100644 tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/package.json delete mode 100644 tests/summarycode/data/plugin_consolidate/nested-packages/package.json diff --git a/src/summarycode/classify.py b/src/summarycode/classify.py index 9814dc74eca..eb8a12aa7c2 100644 --- a/src/summarycode/classify.py +++ b/src/summarycode/classify.py @@ -7,14 +7,9 @@ # See https://aboutcode.org for more information about nexB OSS projects. # - - from commoncode.datautils import Boolean -from commoncode.fileset import get_matches from plugincode.pre_scan import PreScanPlugin from plugincode.pre_scan import pre_scan_impl -from plugincode.post_scan import PostScanPlugin -from plugincode.post_scan import post_scan_impl from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import PRE_SCAN_GROUP @@ -25,6 +20,7 @@ # Tracing flag TRACE = False + def logger_debug(*args): pass @@ -43,13 +39,11 @@ def emit(self, record): except Exception: self.handleError(record) - logger = logging.getLogger(__name__) logger.handlers = [ClickHandler()] logger.propagate = False logger.setLevel(logging.DEBUG) - def logger_debug(*args): return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) @@ -138,97 +132,6 @@ def get_relative_path(root_path, path): return path[len(root_path):].lstrip('/') -@post_scan_impl -class PackageTopAndKeyFilesTagger(PostScanPlugin): - """ - Tag resources as key or top level based on Package-type specific settings. - """ - - sort_order = 0 - - def is_enabled(self, classify, **kwargs): - return classify - - def process_codebase(self, codebase, classify, **kwargs): - """ - Tag resource as key or top level files based on Package type-specific - rules. - """ - if not classify: - logger_debug('PackageTopAndKeyFilesTagger: return') - return - - from packagedcode import get_package_class - - if codebase.has_single_resource: - # What if we scanned a single file and we do not have a root proper? - return - - root_path = codebase.root.path - - has_package_data = hasattr(codebase.root, 'package_data') - if not has_package_data: - # FIXME: this is not correct... we may still have cases where this - # is wrong: e.g. a META-INF directory and we may not have a package - return - - - for resource in codebase.walk(topdown=True): - package_data_all = resource.package_data or [] - - if not package_data_all: - continue - if not resource.has_children(): - continue - - descendants = None - - for package_data in package_data_all: - package_class = get_package_class(package_data) - extra_root_dirs = package_class.extra_root_dirs() - extra_key_files = package_class.extra_key_files() - if TRACE: - logger_debug('PackageTopAndKeyFilesTagger: extra_root_dirs:', extra_root_dirs) - logger_debug('PackageTopAndKeyFilesTagger: extra_key_files:', extra_key_files) - - if not (extra_root_dirs or extra_key_files): - # FIXME: this is not correct! - # we may still have other files under the actual root. - continue - - if not descendants: - descendants = { - get_relative_path(root_path, r.path): r - for r in resource.descendants(codebase)} - - if TRACE: - logger_debug('PackageTopAndKeyFilesTagger: descendants') - for rpath, desc in descendants.items(): - logger_debug('rpath:', rpath, 'desc:', desc) - - for rpath, desc in descendants.items(): - if extra_root_dirs and get_matches(rpath, extra_root_dirs): - if TRACE: - logger_debug('PackageTopAndKeyFilesTagger: get_matches for:', rpath, desc) - desc.is_top_level = True - if desc.is_file: - set_classification_flags(desc) - desc.save(codebase) - - for child in desc.children(codebase): - if TRACE: - logger_debug('PackageTopAndKeyFilesTagger: set is_top_level for:', child) - - child.is_top_level = True - if child.is_file: - set_classification_flags(child) - child.save(codebase) - - if extra_key_files and get_matches(rpath, extra_key_files): - desc.is_key_file = True - desc.save(codebase) - - LEGAL_STARTS_ENDS = ( 'copying', 'copyright', @@ -251,7 +154,6 @@ def process_codebase(self, codebase, classify, **kwargs): 'patents', ) - _MANIFEST_ENDS = { '.about': 'ABOUT file', '/bower.json': 'bower', @@ -298,10 +200,8 @@ def process_codebase(self, codebase, classify, **kwargs): } - MANIFEST_ENDS = tuple(_MANIFEST_ENDS) - README_STARTS_ENDS = ( 'readme', ) @@ -323,9 +223,10 @@ def check_resource_name_start_and_end(resource, STARTS_ENDS): def set_classification_flags(resource, - _LEGAL=LEGAL_STARTS_ENDS, - _MANIF=MANIFEST_ENDS, - _README=README_STARTS_ENDS): + _LEGAL=LEGAL_STARTS_ENDS, + _MANIF=MANIFEST_ENDS, + _README=README_STARTS_ENDS, +): """ Set classification flags on the `resource` Resource """ @@ -333,7 +234,8 @@ def set_classification_flags(resource, resource.is_legal = is_legal = check_resource_name_start_and_end(resource, _LEGAL) resource.is_readme = is_readme = check_resource_name_start_and_end(resource, _README) - resource.is_manifest = is_manifest = path.endswith(_MANIF) - resource.is_key_file = (resource.is_top_level - and (is_readme or is_legal or is_manifest)) + # FIXME: this will never be picked up as this is NOT available in a pre-scan plugin + has_package_data = bool(getattr(resource, 'package_data', False)) + resource.is_manifest = is_manifest = path.endswith(_MANIF) or has_package_data + resource.is_key_file = (resource.is_top_level and (is_readme or is_legal or is_manifest)) return resource diff --git a/src/summarycode/plugin_consolidate.py b/src/summarycode/plugin_consolidate.py index f22fe8a015f..336a939279d 100644 --- a/src/summarycode/plugin_consolidate.py +++ b/src/summarycode/plugin_consolidate.py @@ -17,8 +17,7 @@ from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import POST_SCAN_GROUP from commoncode.text import python_safe_name -from packagedcode import get_package_instance -from packagedcode.build import BaseBuildManifestPackageData +from packagedcode import models from packagedcode.utils import combine_expressions from plugincode.post_scan import PostScanPlugin from plugincode.post_scan import post_scan_impl @@ -240,11 +239,11 @@ def get_consolidated_packages(codebase): """ for resource in codebase.walk(topdown=False): for package_data in resource.packages: - package = get_package_instance(package_data) + package = models.PackageData.from_dict(scan_data)(package_data) package_root = package.get_package_root(resource, codebase) package_root.extra_data['package_root'] = True package_root.save(codebase) - is_build_file = isinstance(package, BaseBuildManifestPackageData) + is_build_file = isinstance(package, ) package_resources = list(package.get_package_resources(package_root, codebase)) package_license_expression = package.license_expression package_copyright = package.copyright diff --git a/src/summarycode/score.py b/src/summarycode/score.py index be0875c0e91..f65a7a3dfa3 100644 --- a/src/summarycode/score.py +++ b/src/summarycode/score.py @@ -9,14 +9,13 @@ import attr -from packagedcode.utils import combine_expressions -from plugincode.post_scan import PostScanPlugin -from plugincode.post_scan import post_scan_impl from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import POST_SCAN_GROUP - from license_expression import Licensing +from plugincode.post_scan import PostScanPlugin +from plugincode.post_scan import post_scan_impl +from packagedcode.utils import combine_expressions # Tracing flags TRACE = False @@ -48,12 +47,14 @@ class LicenseClarityScore(PostScanPlugin): """ Compute a License clarity score at the codebase level. """ + codebase_attributes = dict(summary=attr.ib(default=attr.Factory(dict))) sort_order = 5 options = [ - PluggableCommandLineOption(('--license-clarity-score',), + PluggableCommandLineOption( + ('--license-clarity-score',), is_flag=True, default=False, help='Compute a summary license clarity score at the codebase level.', @@ -75,7 +76,6 @@ def process_codebase(self, codebase, license_clarity_score, **kwargs): codebase.attributes.summary['license_clarity_score'] = scoring_elements.to_dict() - def compute_license_score(codebase): """ Return a mapping of scoring elements and a license clarity score computed at @@ -124,12 +124,25 @@ def compute_license_score(codebase): """ scoring_elements = ScoringElements() - declared_licenses = get_field_values_from_codebase_resources(codebase, 'licenses', key_files_only=True) - declared_license_expressions = get_field_values_from_codebase_resources(codebase, 'license_expressions', key_files_only=True) + declared_licenses = get_field_values_from_codebase_resources( + codebase=codebase, + field_name='licenses', + key_files_only=True, + ) + declared_license_expressions = get_field_values_from_codebase_resources( + codebase=codebase, field_name='license_expressions', key_files_only=True + ) + unique_declared_license_expressions = unique(declared_license_expressions) declared_license_categories = get_license_categories(declared_licenses) - copyrights = get_field_values_from_codebase_resources(codebase, 'copyrights', key_files_only=True) - other_licenses = get_field_values_from_codebase_resources(codebase, 'licenses', key_files_only=False) + + copyrights = get_field_values_from_codebase_resources( + codebase=codebase, field_name='copyrights', key_files_only=True + ) + + other_licenses = get_field_values_from_codebase_resources( + codebase=codebase, field_name='licenses', key_files_only=False + ) scoring_elements.declared_license = bool(declared_licenses) if scoring_elements.declared_license: @@ -149,20 +162,23 @@ def compute_license_score(codebase): is_permissively_licensed = check_declared_license_categories(declared_license_categories) if is_permissively_licensed: - scoring_elements.conflicting_license_categories = check_for_conflicting_licenses(other_licenses) - if ( - scoring_elements.conflicting_license_categories - and scoring_elements.score > 0 - ): + scoring_elements.conflicting_license_categories = check_for_conflicting_licenses( + other_licenses + ) + if scoring_elements.conflicting_license_categories and scoring_elements.score > 0: scoring_elements.score -= 20 declared_license_expression = get_primary_license(unique_declared_license_expressions) if not declared_license_expression: # If we cannot get a single primary license, then we combine and simplify the license expressions from key files - combined_declared_license_expression = combine_expressions(unique_declared_license_expressions) + combined_declared_license_expression = combine_expressions( + unique_declared_license_expressions + ) if combined_declared_license_expression: - declared_license_expression = str(Licensing().parse(combined_declared_license_expression).simplify()) + declared_license_expression = str( + Licensing().parse(combined_declared_license_expression).simplify() + ) scoring_elements.ambigous_compound_licensing = True if scoring_elements.score > 0: scoring_elements.score -= 10 @@ -201,7 +217,7 @@ def to_dict(self): 'has_license_text': self.has_license_text, 'declared_copyrights': self.declared_copyrights, 'conflicting_license_categories': self.conflicting_license_categories, - 'ambigous_compound_licensing': self.ambigous_compound_licensing + 'ambigous_compound_licensing': self.ambigous_compound_licensing, } @@ -235,13 +251,15 @@ def is_good_license(detected_license): rule = detected_license['matched_rule'] coverage = rule.get('match_coverage') or 0 relevance = rule.get('rule_relevance') or 0 - match_types = dict([ - ('is_license_text', rule['is_license_text']), - ('is_license_notice', rule['is_license_notice']), - ('is_license_reference', rule['is_license_reference']), - ('is_license_tag', rule['is_license_tag']), - ('is_license_intro', rule['is_license_intro']), - ]) + match_types = dict( + [ + ('is_license_text', rule['is_license_text']), + ('is_license_notice', rule['is_license_notice']), + ('is_license_reference', rule['is_license_reference']), + ('is_license_tag', rule['is_license_tag']), + ('is_license_intro', rule['is_license_intro']), + ] + ) matched = False for match_type, mval in match_types.items(): if mval: @@ -256,9 +274,11 @@ def is_good_license(detected_license): if score >= thresholds.min_score: return True else: - if (score >= thresholds.min_score - and coverage >= thresholds.min_coverage - and relevance >= thresholds.min_relevance): + if ( + score >= thresholds.min_score + and coverage >= thresholds.min_coverage + and relevance >= thresholds.min_relevance + ): return True return False @@ -270,11 +290,7 @@ def check_declared_licenses(declared_licenses): If so, return True. Otherwise, return False. """ - return any( - is_good_license(declared_license) - for declared_license - in declared_licenses - ) + return any(is_good_license(declared_license) for declared_license in declared_licenses) def get_field_values_from_codebase_resources(codebase, field_name, key_files_only=False): @@ -324,10 +340,12 @@ def check_for_license_texts(declared_licenses): """ for declared_license in declared_licenses: matched_rule = declared_license.get('matched_rule', {}) - if any([ - matched_rule.get('is_license_text', False), - matched_rule.get('is_license_notice', False), - ]): + if any( + [ + matched_rule.get('is_license_text', False), + matched_rule.get('is_license_notice', False), + ] + ): return True return False @@ -362,10 +380,7 @@ def check_for_conflicting_licenses(other_licenses): If so, return True. Otherwise, return False. """ for license_info in other_licenses: - if ( - license_info.get('category', '') - in CONFLICTING_LICENSE_CATEGORIES - ): + if license_info.get('category', '') in CONFLICTING_LICENSE_CATEGORIES: return True return False @@ -402,10 +417,7 @@ def group_license_expressions(unique_license_expressions): break for j1 in joined_expressions[i:]: if licensing.is_equivalent(j, j1): - if ( - j not in unique_joined_expressions - and j not in seen_joined_expression - ): + if j not in unique_joined_expressions and j not in seen_joined_expression: unique_joined_expressions.append(j) seen_joined_expression.append(j1) else: @@ -445,9 +457,7 @@ def get_primary_license(declared_license_expressions): # Group single expressions to joined expressions to see if single # expressions are accounted for in a joined expression single_expressions_by_joined_expressions = { - joined_expression: [] - for joined_expression - in unique_joined_expressions + joined_expression: [] for joined_expression in unique_joined_expressions } not_in_joined_expressions = [] # Check to see if the single expression is in the joined expression diff --git a/src/summarycode/summarizer.py b/src/summarycode/summarizer.py index b88cb80e49c..f72d0b8d703 100644 --- a/src/summarycode/summarizer.py +++ b/src/summarycode/summarizer.py @@ -17,14 +17,14 @@ from cluecode.copyrights import CopyrightDetector from packagedcode.utils import combine_expressions -from summarycode.score import (compute_license_score, - get_field_values_from_codebase_resources, - unique) +from packagedcode import models +from summarycode.score import compute_license_score +from summarycode.score import get_field_values_from_codebase_resources +from summarycode.score import unique from summarycode.tallies import compute_codebase_tallies - # Tracing flags -TRACE = True +TRACE = False TRACE_LIGHT = False @@ -53,19 +53,21 @@ class ScanSummary(PostScanPlugin): """ Summarize a scan at the codebase level. """ + sort_order = 10 codebase_attributes = dict(summary=attr.ib(default=attr.Factory(dict))) options = [ - PluggableCommandLineOption(('--summary',), + PluggableCommandLineOption( + ('--summary',), is_flag=True, default=False, help='Summarize scans by providing declared origin ' - 'information and other detected origin info at the ' - 'codebase attribute level.', + 'information and other detected origin info at the ' + 'codebase attribute level.', help_group=POST_SCAN_GROUP, - required_options=['classify'] + required_options=['classify'], ) ] @@ -73,7 +75,8 @@ def is_enabled(self, summary, **kwargs): return summary def process_codebase(self, codebase, summary, **kwargs): - if TRACE_LIGHT: logger_debug('ScanSummary:process_codebase') + if TRACE_LIGHT: + logger_debug('ScanSummary:process_codebase') # Get tallies tallies = compute_codebase_tallies(codebase, keep_details=False, **kwargs) @@ -81,21 +84,24 @@ def process_codebase(self, codebase, summary, **kwargs): holders_tallies = tallies.get('holders') or [] programming_language_tallies = tallies.get('programming_language') or [] - # Get Package data from key files - key_files_package_data = get_field_values_from_codebase_resources( - codebase, - 'package_data', - key_files_only=True - ) - # Remove any package that has no name - key_file_package_data = [ - package_data - for package_data in key_files_package_data - if package_data.get('name') - ] - - # Determine declared license expression, declared holder, and primary language from Package data - declared_license_expression, declared_holders, primary_language = get_origin_info_from_package_data(key_file_package_data) + # Determine declared license expression, declared holder, and primary + # language from Package data at the top level. + + declared_license_expression = None + declared_holders = None + primary_language = None + + # use top level packages + if hasattr(codebase.attributes, 'packages'): + top_level_packages = codebase.attributes.packages + ( + declared_license_expression, + declared_holders, + primary_language, + ) = get_origin_info_from_top_level_packages( + top_level_packages=top_level_packages, + codebase=codebase, + ) if declared_license_expression: scoring_elements, _ = compute_license_score(codebase) @@ -103,7 +109,9 @@ def process_codebase(self, codebase, summary, **kwargs): # If we did not get a declared license expression from detected # package data, then we use the results from `compute_license_score` scoring_elements, declared_license_expression = compute_license_score(codebase) - other_license_expressions = remove_from_tallies(declared_license_expression, license_expressions_tallies) + other_license_expressions = remove_from_tallies( + declared_license_expression, license_expressions_tallies + ) if not declared_holders: declared_holders = get_declared_holders(codebase, holders_tallies) @@ -131,9 +139,12 @@ def remove_from_tallies(entry, tallies): pruned_tallies = [] for t in tallies: if ( - isinstance(entry, dict) and t == entry - or isinstance(entry, (list, tuple)) and t in entry - or isinstance(entry, (list, tuple)) and t.get('value') in entry + isinstance(entry, dict) + and t == entry + or isinstance(entry, (list, tuple)) + and t in entry + or isinstance(entry, (list, tuple)) + and t.get('value') in entry or t.get('value') == entry ): continue @@ -150,16 +161,20 @@ def get_declared_holders(codebase, holders_tallies): highest amount of refrences throughout the codebase. """ entry_by_holders = { - fingerprints.generate(entry['value']): entry - for entry in holders_tallies if entry['value'] + fingerprints.generate(entry['value']): entry for entry in holders_tallies if entry['value'] } - key_file_holders = get_field_values_from_codebase_resources(codebase, 'holders', key_files_only=True) + key_file_holders = get_field_values_from_codebase_resources( + codebase, 'holders', key_files_only=True + ) entry_by_key_file_holders = { fingerprints.generate(entry['holder']): entry - for entry in key_file_holders if entry['holder'] + for entry in key_file_holders + if entry['holder'] } unique_key_file_holders = unique(entry_by_key_file_holders.keys()) - unique_key_file_holders_entries = [entry_by_holders[holder] for holder in unique_key_file_holders] + unique_key_file_holders_entries = [ + entry_by_holders[holder] for holder in unique_key_file_holders + ] holder_by_counts = defaultdict(list) for holder_entry in unique_key_file_holders_entries: @@ -186,8 +201,7 @@ def get_primary_language(programming_language_tallies): Return the most common detected programming language as the primary language. """ programming_languages_by_count = { - entry['count']: entry['value'] - for entry in programming_language_tallies + entry['count']: entry['value'] for entry in programming_language_tallies } primary_language = '' if programming_languages_by_count: @@ -196,71 +210,71 @@ def get_primary_language(programming_language_tallies): return primary_language -def get_origin_info_from_package_data(key_file_package_data): +def get_origin_info_from_top_level_packages(top_level_packages, codebase): """ Return a 3-tuple containing the strings of declared license expression, - copyright holder, and primary programming language from a list of detected - package data. + copyright holder, and primary programming language from a + ``top_level_packages`` list of detected top-level packages mapping and a + ``codebase``. """ - if not key_file_package_data: + if not top_level_packages: return '', '', '' - if len(key_file_package_data) > 1: - license_expressions = [] - programming_languages = [] - copyrights = [] - parties = [] - for package_data in key_file_package_data: - license_expression = package_data.get('license_expression') or '' - programming_language = package_data.get('primary_language') or '' - copyright_statement = package_data.get('copyright') or '' - package_parties = package_data.get('parties', []) + license_expressions = [] + programming_languages = [] + copyrights = [] + parties = [] + + for package_mapping in top_level_packages: + package = models.Package.from_dict(package_mapping) + # we are only interested in key packages + if not is_key_package(package, codebase): + continue + + license_expression = package.license_expression + if license_expression: license_expressions.append(license_expression) + + programming_language = package.primary_language + if programming_language: programming_languages.append(programming_language) + + copyright_statement = package.copyright + if copyright_statement: copyrights.append(copyright_statement) - parties.extend(package_parties) - - # Combine license expressions - unique_license_expressions = unique(license_expressions) - combined_declared_license_expression = combine_expressions(unique_license_expressions) - declared_license_expression = '' - if combined_declared_license_expression: - declared_license_expression = str(Licensing().parse(combined_declared_license_expression).simplify()) - - # Get holders - holders = list(get_holders_from_copyright(copyrights)) - declared_holders = [] - if holders: - declared_holders = holders - elif parties: - declared_holders = [party['name'] for party in parties] - - # Programming language - unique_programming_languages = unique(programming_languages) - primary_language = '' - if len(unique_programming_languages) == 1: - primary_language = unique_programming_languages[0] - - return declared_license_expression, declared_holders, primary_language - - package = key_file_package_data[0] - declared_license_expression = package.get('license_expression') or '' - package_primary_language = package.get('primary_language') or '' - - # Determine holders from Package copyright statement - package_copyright = package.get('copyright', '') - package_holders = [] - if package_copyright: - package_holders = list(get_holders_from_copyright(package_copyright)) - - if package_holders: - declared_holder = package_holders - else: - # If there is no copyright statement on the package, collect the - # detected party members and return them as a holder - declared_holder = [party['name'] for party in package.get('parties', [])] - return declared_license_expression, declared_holder, package_primary_language + parties.extend(package.parties or []) + + # Combine license expressions + unique_license_expressions = unique(license_expressions) + combined_declared_license_expression = combine_expressions( + expressions=unique_license_expressions, + relation='AND', + ) + + declared_license_expression = '' + if combined_declared_license_expression: + declared_license_expression = str( + Licensing().parse(combined_declared_license_expression).simplify() + ) + + # Get holders + holders = list(get_holders_from_copyright(copyrights)) + declared_holders = [] + if holders: + declared_holders = holders + elif parties: + declared_holders = [party.name for party in parties or []] + + declared_holders = unique(declared_holders) + + # Programming language + unique_programming_languages = unique(programming_languages) + primary_language = '' + if len(unique_programming_languages) == 1: + primary_language = unique_programming_languages[0] + + return declared_license_expression, declared_holders, primary_language def get_holders_from_copyright(copyright): @@ -270,13 +284,9 @@ def get_holders_from_copyright(copyright): numbered_lines = [] if isinstance(copyright, list): for i, c in enumerate(copyright): - numbered_lines.append( - (i, c) - ) + numbered_lines.append((i, c)) else: - numbered_lines.append( - (0, copyright) - ) + numbered_lines.append((0, copyright)) holder_detections = CopyrightDetector().detect( numbered_lines, @@ -287,3 +297,21 @@ def get_holders_from_copyright(copyright): for holder_detection in holder_detections: yield holder_detection.holder + + +def is_key_package(package, codebase): + """ + Return True if the ``package`` Package is a key, top-level package. + """ + # get the datafile_paths of the package + # get the top level files in the codebase + # return True if any datafile_paths is also a top level files? or key file? + + datafile_paths = set(package.datafile_paths or []) + for resource in codebase.walk(topdown=True): + if not resource.is_top_level: + break + if resource.path in datafile_paths: + return True + + return False diff --git a/tests/scancode/data/composer/composer.expected.json b/tests/scancode/data/composer/composer.expected.json index 10bd08f69d7..bc596b11ce3 100644 --- a/tests/scancode/data/composer/composer.expected.json +++ b/tests/scancode/data/composer/composer.expected.json @@ -27,9 +27,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/php", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/php?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/fideloper/proxy", @@ -39,9 +40,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/fideloper/proxy", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/fideloper/proxy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/laravel/framework", @@ -51,9 +53,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/laravel/framework", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/laravel/framework?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/laravel/tinker", @@ -63,9 +66,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/laravel/tinker", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/laravel/tinker?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/filp/whoops", @@ -75,9 +79,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/filp/whoops", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/filp/whoops?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/fzaninotto/faker", @@ -87,9 +92,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/fzaninotto/faker", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/fzaninotto/faker?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/mockery/mockery", @@ -99,9 +105,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/mockery/mockery", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/mockery/mockery?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" }, { "purl": "pkg:composer/phpunit/phpunit", @@ -111,9 +118,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:composer/phpunit/phpunit", - "for_package": "pkg:composer/laravel/laravel", - "lockfile": "composer.json" + "dependency_uid": "pkg:composer/phpunit/phpunit?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "composer.json", + "datasource_id": "php_composer_json" } ], "packages": [ @@ -151,20 +159,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:composer/laravel/laravel", - "package_data_files": [ + "repository_homepage_url": "https://packagist.org/packages/laravel/laravel", + "repository_download_url": null, + "api_data_url": "https://packagist.org/p/packages/laravel/laravel.json", + "package_uid": "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "composer.json" ], - "files": [ - "composer.json" + "datasource_ids": [ + "php_composer_json" ], - "purl": "pkg:composer/laravel/laravel", - "repository_homepage_url": "https://packagist.org/packages/laravel/laravel", - "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/laravel/laravel.json" + "purl": "pkg:composer/laravel/laravel" } ], "files": [ @@ -206,8 +213,8 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -283,14 +290,15 @@ "resolved_package": {} } ], - "purl": "pkg:composer/laravel/laravel", "repository_homepage_url": "https://packagist.org/packages/laravel/laravel", "repository_download_url": null, - "api_data_url": "https://packagist.org/p/packages/laravel/laravel.json" + "api_data_url": "https://packagist.org/p/packages/laravel/laravel.json", + "datasource_id": "php_composer_json", + "purl": "pkg:composer/laravel/laravel" } ], "for_packages": [ - "pkg:composer/laravel/laravel" + "pkg:composer/laravel/laravel?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/scancode/data/help/help.txt b/tests/scancode/data/help/help.txt index bec706ddd48..c6e62546698 100644 --- a/tests/scancode/data/help/help.txt +++ b/tests/scancode/data/help/help.txt @@ -9,7 +9,8 @@ Options: primary scans: -l, --license Scan for licenses. - -p, --package Scan for package data and build scripts. + -p, --package Scan for package and dependency manifests, lockfiles + and related data. -c, --copyright Scan for copyrights. other scans: @@ -163,7 +164,7 @@ Options: --about Show information about ScanCode and licensing and exit. --version Show the version and exit. --examples Show command examples and exit. - --list-packages Show the list of supported package types and exit. + --list-packages Show the list of supported package manifest parsers and exit. --plugins Show the list of available ScanCode plugins and exit. --print-options Show the list of selected options and exit. diff --git a/tests/scancode/data/plugin_consolidate/component-package-build-expected.json b/tests/scancode/data/plugin_consolidate/component-package-build-expected.json index 2e9c5e9c529..0d0daa39d31 100644 --- a/tests/scancode/data/plugin_consolidate/component-package-build-expected.json +++ b/tests/scancode/data/plugin_consolidate/component-package-build-expected.json @@ -78,9 +78,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "component-package-build/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", @@ -221,9 +219,7 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "component-package-build/build", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:buck/demo", "repository_homepage_url": null, @@ -728,9 +724,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "component-package-build/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", diff --git a/tests/scancode/data/plugin_consolidate/component-package-expected.json b/tests/scancode/data/plugin_consolidate/component-package-expected.json index 35f2429ad0d..4cd294b034e 100644 --- a/tests/scancode/data/plugin_consolidate/component-package-expected.json +++ b/tests/scancode/data/plugin_consolidate/component-package-expected.json @@ -66,9 +66,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "component-package/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", @@ -616,9 +614,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "component-package/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", diff --git a/tests/scancode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json b/tests/scancode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json index 6aa7d737a25..cbf0b94afd6 100644 --- a/tests/scancode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json +++ b/tests/scancode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json @@ -66,9 +66,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package-files-not-counted-in-license-holders/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", @@ -259,9 +257,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package-files-not-counted-in-license-holders/package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", diff --git a/tests/scancode/data/plugin_consolidate/package-fileset-expected.json b/tests/scancode/data/plugin_consolidate/package-fileset-expected.json index 7f1a42f339e..69f49e95d44 100644 --- a/tests/scancode/data/plugin_consolidate/package-fileset-expected.json +++ b/tests/scancode/data/plugin_consolidate/package-fileset-expected.json @@ -49,9 +49,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", @@ -195,9 +193,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", diff --git a/tests/scancode/data/plugin_consolidate/package-manifest-expected.json b/tests/scancode/data/plugin_consolidate/package-manifest-expected.json index 0e50180b962..dca144d2a7d 100644 --- a/tests/scancode/data/plugin_consolidate/package-manifest-expected.json +++ b/tests/scancode/data/plugin_consolidate/package-manifest-expected.json @@ -49,9 +49,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package-manifest", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", @@ -191,9 +189,7 @@ "apache-2.0" ], "notice_text": null, - "root_path": "package-manifest", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", diff --git a/tests/scancode/data/rpm/fping-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json b/tests/scancode/data/rpm/fping-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json index 01aad44ea9a..e4666bfd4ff 100644 --- a/tests/scancode/data/rpm/fping-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json +++ b/tests/scancode/data/rpm/fping-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json @@ -54,22 +54,21 @@ "license_expression": "unknown", "declared_license": "distributable", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:rpm/fping@2.4-0.b2.rhfc1.dag?arch=src" ], "extra_data": {}, - "package_uuid": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag", - "package_data_files": [ + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "fping-2.4-0.b2.rhfc1.dag.i386.rpm" ], - "files": [ - "fping-2.4-0.b2.rhfc1.dag.i386.rpm" + "datasource_ids": [ + "rpm_archive" ], - "purl": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag" } ], "files": [ @@ -108,23 +107,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": null, "declared_license": "distributable", "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:rpm/fping@2.4-0.b2.rhfc1.dag?arch=src" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "rpm_archive", + "purl": "pkg:rpm/fping@2.4-0.b2.rhfc1.dag" } ], "for_packages": [ - "pkg:rpm/fping@2.4-0.b2.rhfc1.dag" + "pkg:rpm/fping@2.4-0.b2.rhfc1.dag?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/scancode/test_cli.py b/tests/scancode/test_cli.py index 243c5851f65..6b555dbea6b 100644 --- a/tests/scancode/test_cli.py +++ b/tests/scancode/test_cli.py @@ -650,7 +650,7 @@ def test_scan_does_scan_php_composer(): expected_file = test_env.get_test_loc('composer/composer.expected.json') result_file = test_env.get_temp_file('results.json') run_scan_click(['--package', test_file, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_scan_does_scan_rpm(): @@ -658,7 +658,7 @@ def test_scan_does_scan_rpm(): expected_file = test_env.get_test_loc('rpm/fping-2.4-0.b2.rhfc1.dag.i386.rpm.expected.json') result_file = test_env.get_temp_file('results.json') run_scan_click(['--package', test_file, '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES) def test_scan_cli_help(regen=REGEN_TEST_FIXTURES): diff --git a/tests/summarycode/data/full_summary/summary.expected.json b/tests/summarycode/data/full_summary/summary.expected.json new file mode 100644 index 00000000000..2fbc42215f1 --- /dev/null +++ b/tests/summarycode/data/full_summary/summary.expected.json @@ -0,0 +1,8695 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--copyright": true, + "--info": true, + "--json-pp": "", + "--license": true, + "--package": true, + "--summary": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "3.0.0", + "message": null, + "errors": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 26 + } + } + ], + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/abbrev", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansi", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansicolors", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansistyles", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/archy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/async-some", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/block-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/char-spinner", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chmodr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chownr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/cmd-shim", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/columnify", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/config-chain", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/dezalgo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/editor", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-vacuum", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-write-stream-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream-npm", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-git", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-username-repo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/glob", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/graceful-fs", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/hosted-git-info", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inflight", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inherits", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ini", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/init-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lockfile", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lru-cache", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/minimatch", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/mkdirp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/node-gyp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nopt", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-git-url", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-package-data", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-cache-filename", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-install-checks", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-package-arg", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-client", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-user-validate", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npmlog", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/once", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/opener", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/osenv", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/path-is-inside", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-installed", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/readable-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/realize-package-specifier", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/request", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/retry", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rimraf", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/semver", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sha", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/slide", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sorted-object", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/spdx", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tar", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/text-table", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/uid-number", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/umask", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-name", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/which", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/wrappy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/write-file-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-license", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/deep-equal", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked-man", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-couchapp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-mock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/require-inject", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sprintf-js", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tap", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + } + ], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "package_uid": "pkg:npm/npm@2.13.5", + "package_data_files": [ + "scan/package.json" + ], + "files": [ + "scan/cc0-1.0.LICENSE", + "scan/package.json", + "scan/README", + "scan/arch/adler32.c", + "scan/arch/zlib.h", + "scan/arch/zutil.h", + "scan/JGroups/src/FixedMembershipToken.java", + "scan/JGroups/src/GuardedBy.java", + "scan/JGroups/src/ImmutableReference.java", + "scan/JGroups/src/RATE_LIMITER.java", + "scan/JGroups/src/RouterStub.java", + "scan/JGroups/src/RouterStubManager.java", + "scan/JGroups/src/S3_PING.java", + "scan/zlib/adler32.c", + "scan/zlib/deflate.c", + "scan/zlib/deflate.h", + "scan/zlib/zlib.h", + "scan/zlib/zutil.c", + "scan/zlib/zutil.h", + "scan/zlib/ada/zlib.ads", + "scan/zlib/dotzlib/AssemblyInfo.cs", + "scan/zlib/dotzlib/ChecksumImpl.cs", + "scan/zlib/gcc_gvmat64/gvmat64.S", + "scan/zlib/infback9/infback9.c", + "scan/zlib/infback9/infback9.h", + "scan/zlib/iostream2/zstream.h" + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 12 + }, + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "artistic-2.0", + "count": 1 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "cc-by-2.5", + "count": 1 + }, + { + "value": "cc0-1.0", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 6 + }, + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 4 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 4 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 6 + }, + { + "value": "Jean-loup Gailly", + "count": 4 + }, + { + "value": "Mark Adler", + "count": 4 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 20 + }, + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": "Gilles Vollant", + "count": 1 + }, + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 12 + }, + { + "value": "Java", + "count": 7 + }, + { + "value": "C#", + "count": 2 + }, + { + "value": "GAS", + "count": 1 + } + ] + }, + "files": [ + { + "path": "scan", + "type": "directory", + "name": "scan", + "base_name": "scan", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 26, + "dirs_count": 9, + "size_count": 58647, + "scan_errors": [] + }, + { + "path": "scan/JGroups", + "type": "directory", + "name": "JGroups", + "base_name": "JGroups", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 7, + "dirs_count": 1, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src", + "type": "directory", + "name": "src", + "base_name": "src", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 7, + "dirs_count": 0, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/FixedMembershipToken.java", + "type": "file", + "name": "FixedMembershipToken.java", + "base_name": "FixedMembershipToken", + "extension": ".java", + "size": 1016, + "sha1": "d0d55d2ae0842afee96695bcc8be939e763704ec", + "md5": "301dfe021b3b4076b9f8d49577205b44", + "sha256": "ff6dfac01c9b7ad9fcb5e646db83b482f5f720d981f0ca6c68828c5aa4ec784b", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 79.62, + "copyrights": [ + { + "copyright": "Copyright 2005, JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/GuardedBy.java", + "type": "file", + "name": "GuardedBy.java", + "base_name": "GuardedBy", + "extension": ".java", + "size": 482, + "sha1": "21ec75514ce72011c4e86c977505c024832c1b63", + "md5": "5165fdeefda7a55c13e44c5e56cac920", + "sha256": "8553411bf58f4ac35fc9e7d6142f11fc2fbef33e50a77f514a253135807afd44", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "cc-by-2.5", + "score": 100.0, + "name": "Creative Commons Attribution License 2.5", + "short_name": "CC-BY-2.5", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/licenses/by/2.5/", + "text_url": "http://creativecommons.org/licenses/by/2.5/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc-by-2.5", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.yml", + "spdx_license_key": "CC-BY-2.5", + "spdx_url": "https://spdx.org/licenses/CC-BY-2.5", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "cc-by-2.5_4.RULE", + "license_expression": "cc-by-2.5", + "licenses": [ + "cc-by-2.5" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 14, + "matched_length": 14, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc-by-2.5" + ], + "percentage_of_license_text": 19.72, + "copyrights": [ + { + "copyright": "Copyright (c) 2005 Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [ + { + "author": "Bela Ban", + "start_line": 10, + "end_line": 10 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/ImmutableReference.java", + "type": "file", + "name": "ImmutableReference.java", + "base_name": "ImmutableReference", + "extension": ".java", + "size": 1023, + "sha1": "aee1bb33424e7c1264f85c9aad40d43c3738f871", + "md5": "53a91ff66fdc4d812d7656b4e807bfd2", + "sha256": "ec1427fc2f7e322e6a4d5d99f8119310d6586aaaf5b30b2904b4ccd27966e120", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.62, + "copyrights": [ + { + "copyright": "Copyright 2010, Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RATE_LIMITER.java", + "type": "file", + "name": "RATE_LIMITER.java", + "base_name": "RATE_LIMITER", + "extension": ".java", + "size": 269, + "sha1": "8da19aa25da421608fbe9f4f5eeb122ab35fd01e", + "md5": "52540f80f5c22d8d13627c57b76d44f4", + "sha256": "c3bcefbbb2706f65410b4bb91d531e2ec461fa4586135becc8865adeca3385c8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 4, + "end_line": 4 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStub.java", + "type": "file", + "name": "RouterStub.java", + "base_name": "RouterStub", + "extension": ".java", + "size": 153, + "sha1": "c1baa345449b4b91e61886dadea8f1bbea034eb4", + "md5": "a0b4e3f4d679a98d11d75e7e27e894af", + "sha256": "5c0f94fc518daca08e74fd117fef09d6dd090b0fd623a47edde451be3aed28c7", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStubManager.java", + "type": "file", + "name": "RouterStubManager.java", + "base_name": "RouterStubManager", + "extension": ".java", + "size": 1032, + "sha1": "a51c5bbb738c1c1cd1f58c79060fa5ea4d0dd753", + "md5": "cae07c80e6f79864de002700bf9ab02f", + "sha256": "fe96061d23b37c98913379d54c5388cffdc99239807c2caf8c96d7d10321d085", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.12, + "copyrights": [ + { + "copyright": "Copyright 2009, Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/S3_PING.java", + "type": "file", + "name": "S3_PING.java", + "base_name": "S3_PING", + "extension": ".java", + "size": 252, + "sha1": "a7a9763832eb31e1f7f7927d6288df284b70c6e5", + "md5": "ffb481f2a0c6262d0f7d1e9a4681a6ca", + "sha256": "5470e41b0bfba6adb43649215df756f1a4a5173ceed6127af1b38801651efde2", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/README", + "type": "file", + "name": "README", + "base_name": "README", + "extension": "", + "size": 236, + "sha1": "2e07e32c52d607204fad196052d70e3d18fb8636", + "md5": "effc6856ef85a9250fb1a470792b3f38", + "sha256": "165da86bfdf296cd5a0a3e20c1d1ee86d70ecb8a1fa579d6f8cadad8eee85878", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch", + "type": "directory", + "name": "arch", + "base_name": "arch", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 3, + "dirs_count": 0, + "size_count": 1896, + "scan_errors": [] + }, + { + "path": "scan/arch/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 175, + "sha1": "a7ee5ea54da88a6390e72ff018dd471045d8bbf1", + "md5": "92011414f344e34f711e77bac40e4bc4", + "sha256": "e533accabdc7434f3905ced32c4fba755f707929ad73df6e07172cd5a786e023", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1326, + "sha1": "26610e5eab2a17e0fa9ef6ac791f25f77af145af", + "md5": "4ed53ac605f16247ab7d571670f2351d", + "sha256": "b09e2a43e9960d3d28d37d24f10dfbc462a4cb376da54ba571ac9a8874911ed5", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 69.57, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/cc0-1.0.LICENSE", + "type": "file", + "name": "cc0-1.0.LICENSE", + "base_name": "cc0-1.0", + "extension": ".LICENSE", + "size": 6433, + "sha1": "172444e7c137eb5cd3cae530aca0879c90f7fada", + "md5": "57f047ea87f405486a94bc5a56ba7fcf", + "sha256": "963aabe87f6a51ca9c237669034a9fdecd71df7350eaf30bdf0718f63c5a94f8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "cc0-1.0", + "score": 99.69, + "name": "Creative Commons CC0 1.0 Universal", + "short_name": "CC0-1.0", + "category": "Public Domain", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/publicdomain/zero/1.0/", + "text_url": "http://creativecommons.org/publicdomain/zero/1.0/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc0-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.yml", + "spdx_license_key": "CC0-1.0", + "spdx_url": "https://spdx.org/licenses/CC0-1.0", + "start_line": 1, + "end_line": 98, + "matched_rule": { + "identifier": "cc0-1.0_155.RULE", + "license_expression": "cc0-1.0", + "licenses": [ + "cc0-1.0" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "3-seq", + "rule_length": 981, + "matched_length": 978, + "match_coverage": 99.69, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc0-1.0" + ], + "percentage_of_license_text": 100.0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/package.json", + "type": "file", + "name": "package.json", + "base_name": "package", + "extension": ".json", + "size": 37904, + "sha1": "dfc6c1274bd31b47d5cc482af0c0dad9d30eccaa", + "md5": "62b51527599b11b32361699c75b05683", + "sha256": "8b54b0b90570e4b0d5b8c8520e4b5a8258ae15849ec1919f57da093f5df84f38", + "mime_type": "application/json", + "file_type": "JSON data", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "artistic-2.0", + "score": 100.0, + "name": "Artistic License 2.0", + "short_name": "Artistic 2.0", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Perl Foundation", + "homepage_url": "http://www.perlfoundation.org/", + "text_url": "https://www.perlfoundation.org/artistic_license_2_0", + "reference_url": "https://scancode-licensedb.aboutcode.org/artistic-2.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.yml", + "spdx_license_key": "Artistic-2.0", + "spdx_url": "https://spdx.org/licenses/Artistic-2.0", + "start_line": 198, + "end_line": 198, + "matched_rule": { + "identifier": "artistic-2.0_46.RULE", + "license_expression": "artistic-2.0", + "licenses": [ + "artistic-2.0" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": true, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 4, + "matched_length": 4, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "artistic-2.0" + ], + "percentage_of_license_text": 0.1, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "name' Isaac Z.", + "start_line": 16, + "end_line": 17 + } + ], + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib", + "type": "directory", + "name": "zlib", + "base_name": "zlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 13, + "dirs_count": 5, + "size_count": 7951, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada", + "type": "directory", + "name": "ada", + "base_name": "ada", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 2054, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada/zlib.ads", + "type": "file", + "name": "zlib.ads", + "base_name": "zlib", + "extension": ".ads", + "size": 2054, + "sha1": "93b3e6e5822c350a9c12e69a2848e29767777002", + "md5": "4e58eb393ad904c1de81a9ca5b9e392c", + "sha256": "8e6da5a880c0547bac5b71f0f123164511ae17e3c7d7f424e4ec5b44e1cae731", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "gpl-2.0-plus", + "score": 100.0, + "name": "GNU General Public License 2.0 or later", + "short_name": "GPL 2.0 or later", + "category": "Copyleft", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/gpl-2.0-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml", + "spdx_license_key": "GPL-2.0-or-later", + "spdx_url": "https://spdx.org/licenses/GPL-2.0-or-later", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + }, + { + "key": "ada-linking-exception", + "score": 100.0, + "name": "Ada linking exception to GPL 2.0 or later", + "short_name": "Ada linking exception to GPL 2.0 or later", + "category": "Copyleft Limited", + "is_exception": true, + "is_unknown": false, + "owner": "Dmitriy Anisimkov", + "homepage_url": null, + "text_url": "", + "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", + "spdx_license_key": "LicenseRef-scancode-ada-linking-exception", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "gpl-2.0-plus WITH ada-linking-exception" + ], + "percentage_of_license_text": 94.12, + "copyrights": [ + { + "copyright": "Copyright (c) 2002-2004 Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 179, + "sha1": "f98c6c82a570ac852801b46157c1540070d55358", + "md5": "48c4037f16b4670795fdf72e88cc278c", + "sha256": "fc1682e787ccc8d9eb83eb0b1f5acb59d22aa6ce1bff7c749a9dc315237b2240", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.c", + "type": "file", + "name": "deflate.c", + "base_name": "deflate", + "extension": ".c", + "size": 198, + "sha1": "4b4696c59e245cef0bad7334fdb63725ccfa218c", + "md5": "f11ed826baf25f2bfa9c610313460036", + "sha256": "ef7bf500e1accf7e91352788c92b5c6663bab52e2cd6c42284496518e4a5f054", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 40.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.h", + "type": "file", + "name": "deflate.h", + "base_name": "deflate", + "extension": ".h", + "size": 165, + "sha1": "a99a71ff971faf49a52ed6f7d3075fdffae8054b", + "md5": "d8821cd288e2be7fd83cdcac22a427ce", + "sha256": "a3c2fa63c7e730bdd008bc07b7d3865dc76781082b77a03d52a918ce1c7d3459", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib", + "type": "directory", + "name": "dotzlib", + "base_name": "dotzlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 2, + "dirs_count": 0, + "size_count": 863, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/AssemblyInfo.cs", + "type": "file", + "name": "AssemblyInfo.cs", + "base_name": "AssemblyInfo", + "extension": ".cs", + "size": 627, + "sha1": "cc7fcb4d721a7efe9eefa6bd2d9d0105d33203a8", + "md5": "dbd621f76cb27e2fd8b8e2d9d985ffcf", + "sha256": "8b257a625c537736ee3ac2321b4ef56ba8a6fa4f922a35b1a0e992f9327d39e9", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [ + { + "copyright": "Copyright (c) 2004 by Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/ChecksumImpl.cs", + "type": "file", + "name": "ChecksumImpl.cs", + "base_name": "ChecksumImpl", + "extension": ".cs", + "size": 236, + "sha1": "3043848212232cdde81eb3e20fca7f2447d944be", + "md5": "661652a0568e25d12fc9bfad2fdabfb2", + "sha256": "f3144ba734429b825e22c2f9048412e78c907e0142f2cdc629879b3a0fa63c89", + "mime_type": "text/plain", + "file_type": "UTF-8 Unicode text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "boost-1.0", + "score": 100.0, + "name": "Boost Software License 1.0", + "short_name": "Boost 1.0", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Boost", + "homepage_url": "http://www.boost.org/users/license.html", + "text_url": "http://www.boost.org/LICENSE_1_0.txt", + "reference_url": "https://scancode-licensedb.aboutcode.org/boost-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.yml", + "spdx_license_key": "BSL-1.0", + "spdx_url": "https://spdx.org/licenses/BSL-1.0", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "boost-1.0_21.RULE", + "license_expression": "boost-1.0", + "licenses": [ + "boost-1.0" + ], + "referenced_filenames": [ + "LICENSE_1_0.txt" + ], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 32, + "matched_length": 32, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "boost-1.0" + ], + "percentage_of_license_text": 88.89, + "copyrights": [ + { + "copyright": "Copyright Henrik Ravn 2004", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64", + "type": "directory", + "name": "gcc_gvmat64", + "base_name": "gcc_gvmat64", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 1774, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64/gvmat64.S", + "type": "file", + "name": "gvmat64.S", + "base_name": "gvmat64", + "extension": ".S", + "size": 1774, + "sha1": "8dff93e95ccef023a871fb438784635b5df1d541", + "md5": "4f0d2f55d43d9466750350f8b27f0302", + "sha256": "1551b8fb1c2f1f3cc92c8e4f31730ebdde0c766caeca6d670a7758b55e3804f3", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "GAS", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 17, + "end_line": 31, + "matched_rule": { + "identifier": "zlib.LICENSE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 132, + "matched_length": 132, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "authors": [ + { + "author": "Gilles Vollant", + "start_line": 12, + "end_line": 12 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9", + "type": "directory", + "name": "infback9", + "base_name": "infback9", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 2, + "dirs_count": 0, + "size_count": 353, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.c", + "type": "file", + "name": "infback9.c", + "base_name": "infback9", + "extension": ".c", + "size": 185, + "sha1": "299f7a056cf0e0ed7d5bd687c53f3247d809cab2", + "md5": "d570bd029ee2362f2a0927c87999773b", + "sha256": "03fb435669b57aa90fe00c4dbc12d8492ef87b6243427d1e1831006994ee1f80", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 44.44, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2008 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.h", + "type": "file", + "name": "infback9.h", + "base_name": "infback9", + "extension": ".h", + "size": 168, + "sha1": "c849edb4691d23e0db97d3f5da1cc5b396929449", + "md5": "2913c8ea7fb43a0f469bb2797c820a95", + "sha256": "4f8db049a7156b8a4616a6c9df0b5ee09571f0ac2eb253e111f2fb727fb033ea", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 2003 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2", + "type": "directory", + "name": "iostream2", + "base_name": "iostream2", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 649, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2/zstream.h", + "type": "file", + "name": "zstream.h", + "base_name": "zstream", + "extension": ".h", + "size": 649, + "sha1": "b7fe15df27e601b88cde6b6a63dad184ccbce572", + "md5": "8b897171ea0767232e586086bc94518c", + "sha256": "ee2eef602cba7c4ba350617f4154de50cb4cbf274c7dd773130aca0775d5d9cd", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "mit-old-style", + "score": 100.0, + "name": "MIT Old Style", + "short_name": "MIT Old Style", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "MIT", + "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.yml", + "spdx_license_key": "LicenseRef-scancode-mit-old-style", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "start_line": 9, + "end_line": 15, + "matched_rule": { + "identifier": "mit-old-style_cmr-no_1.RULE", + "license_expression": "mit-old-style", + "licenses": [ + "mit-old-style" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 71, + "matched_length": 71, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "mit-old-style" + ], + "percentage_of_license_text": 79.78, + "copyrights": [ + { + "copyright": "Copyright (c) 1997 Christian Michelsen Research AS Advanced Computing", + "start_line": 3, + "end_line": 5 + } + ], + "holders": [ + { + "holder": "Christian Michelsen Research AS Advanced Computing", + "start_line": 4, + "end_line": 5 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1103, + "sha1": "85c65180242c560a4df66e9882119bf70eaefd02", + "md5": "07497e2688dad9406386f0534a0bbfca", + "sha256": "64fef1f0a7cd69eae744ad2fa754ee8568a5715588e38b7a3fa6e11eaeaec97e", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 84.21, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.c", + "type": "file", + "name": "zutil.c", + "base_name": "zutil", + "extension": ".c", + "size": 218, + "sha1": "2e846ef84cfb16e0e8b92c62a850a607a709d7b2", + "md5": "2a0ea6a99e31fb0989209a027476038d", + "sha256": "dc7224c7f079d237acf510ff40282cf6d50352c851d4e2957d227e2a3b57eb4d", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 37.5, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/summarycode/data/full_summary/summary_by_facet.expected.json b/tests/summarycode/data/full_summary/summary_by_facet.expected.json new file mode 100644 index 00000000000..d20b89202f0 --- /dev/null +++ b/tests/summarycode/data/full_summary/summary_by_facet.expected.json @@ -0,0 +1,9497 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--copyright": true, + "--email": true, + "--facet": [ + "dev=*.java", + "dev=*.cs", + "dev=*ada*", + "data=*.S", + "tests=*infback9*", + "docs=*README" + ], + "--info": true, + "--json-pp": "", + "--license": true, + "--package": true, + "--summary": true, + "--summary-by-facet": true, + "--url": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "3.0.0", + "message": null, + "errors": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 26 + } + } + ], + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/abbrev", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansi", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansicolors", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansistyles", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/archy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/async-some", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/block-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/char-spinner", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chmodr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chownr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/cmd-shim", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/columnify", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/config-chain", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/dezalgo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/editor", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-vacuum", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-write-stream-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream-npm", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-git", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-username-repo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/glob", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/graceful-fs", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/hosted-git-info", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inflight", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inherits", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ini", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/init-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lockfile", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lru-cache", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/minimatch", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/mkdirp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/node-gyp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nopt", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-git-url", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-package-data", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-cache-filename", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-install-checks", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-package-arg", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-client", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-user-validate", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npmlog", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/once", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/opener", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/osenv", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/path-is-inside", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-installed", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/readable-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/realize-package-specifier", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/request", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/retry", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rimraf", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/semver", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sha", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/slide", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sorted-object", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/spdx", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tar", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/text-table", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/uid-number", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/umask", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-name", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/which", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/wrappy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/write-file-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-license", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/deep-equal", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked-man", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-couchapp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-mock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/require-inject", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sprintf-js", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tap", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + } + ], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "package_uid": "pkg:npm/npm@2.13.5", + "package_data_files": [ + "scan/package.json" + ], + "files": [ + "scan/cc0-1.0.LICENSE", + "scan/package.json", + "scan/README", + "scan/arch/adler32.c", + "scan/arch/zlib.h", + "scan/arch/zutil.h", + "scan/JGroups/src/FixedMembershipToken.java", + "scan/JGroups/src/GuardedBy.java", + "scan/JGroups/src/ImmutableReference.java", + "scan/JGroups/src/RATE_LIMITER.java", + "scan/JGroups/src/RouterStub.java", + "scan/JGroups/src/RouterStubManager.java", + "scan/JGroups/src/S3_PING.java", + "scan/zlib/adler32.c", + "scan/zlib/deflate.c", + "scan/zlib/deflate.h", + "scan/zlib/zlib.h", + "scan/zlib/zutil.c", + "scan/zlib/zutil.h", + "scan/zlib/ada/zlib.ads", + "scan/zlib/dotzlib/AssemblyInfo.cs", + "scan/zlib/dotzlib/ChecksumImpl.cs", + "scan/zlib/gcc_gvmat64/gvmat64.S", + "scan/zlib/infback9/infback9.c", + "scan/zlib/infback9/infback9.h", + "scan/zlib/iostream2/zstream.h" + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 12 + }, + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "artistic-2.0", + "count": 1 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "cc-by-2.5", + "count": 1 + }, + { + "value": "cc0-1.0", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 6 + }, + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 4 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 4 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 6 + }, + { + "value": "Jean-loup Gailly", + "count": 4 + }, + { + "value": "Mark Adler", + "count": 4 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 20 + }, + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": "Gilles Vollant", + "count": 1 + }, + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 12 + }, + { + "value": "Java", + "count": 7 + }, + { + "value": "C#", + "count": 2 + }, + { + "value": "GAS", + "count": 1 + } + ] + }, + "summary_by_facet": [ + { + "facet": "core", + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 9 + }, + { + "value": "artistic-2.0", + "count": 1 + }, + { + "value": "cc0-1.0", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 4 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 2 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 4 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Mark Adler", + "count": 2 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "authors": [ + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 10 + } + ] + } + }, + { + "facet": "dev", + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "cc-by-2.5", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 4 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 7 + }, + { + "value": "C#", + "count": 2 + } + ] + } + }, + { + "facet": "tests", + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 2 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 2 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 2 + } + ], + "authors": [], + "programming_language": [ + { + "value": "C", + "count": 2 + } + ] + } + }, + { + "facet": "docs", + "summary": { + "license_expressions": [], + "copyrights": [], + "holders": [], + "authors": [], + "programming_language": [] + } + }, + { + "facet": "data", + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "authors": [ + { + "value": "Gilles Vollant", + "count": 1 + } + ], + "programming_language": [ + { + "value": "GAS", + "count": 1 + } + ] + } + }, + { + "facet": "examples", + "summary": { + "license_expressions": [], + "copyrights": [], + "holders": [], + "authors": [], + "programming_language": [] + } + } + ], + "files": [ + { + "path": "scan", + "type": "directory", + "name": "scan", + "base_name": "scan", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 26, + "dirs_count": 9, + "size_count": 58647, + "scan_errors": [] + }, + { + "path": "scan/JGroups", + "type": "directory", + "name": "JGroups", + "base_name": "JGroups", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 7, + "dirs_count": 1, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src", + "type": "directory", + "name": "src", + "base_name": "src", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 7, + "dirs_count": 0, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/FixedMembershipToken.java", + "type": "file", + "name": "FixedMembershipToken.java", + "base_name": "FixedMembershipToken", + "extension": ".java", + "size": 1016, + "sha1": "d0d55d2ae0842afee96695bcc8be939e763704ec", + "md5": "301dfe021b3b4076b9f8d49577205b44", + "sha256": "ff6dfac01c9b7ad9fcb5e646db83b482f5f720d981f0ca6c68828c5aa4ec784b", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 79.62, + "copyrights": [ + { + "copyright": "Copyright 2005, JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.fsf.org/", + "start_line": 20, + "end_line": 20 + } + ], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/GuardedBy.java", + "type": "file", + "name": "GuardedBy.java", + "base_name": "GuardedBy", + "extension": ".java", + "size": 482, + "sha1": "21ec75514ce72011c4e86c977505c024832c1b63", + "md5": "5165fdeefda7a55c13e44c5e56cac920", + "sha256": "8553411bf58f4ac35fc9e7d6142f11fc2fbef33e50a77f514a253135807afd44", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "cc-by-2.5", + "score": 100.0, + "name": "Creative Commons Attribution License 2.5", + "short_name": "CC-BY-2.5", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/licenses/by/2.5/", + "text_url": "http://creativecommons.org/licenses/by/2.5/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc-by-2.5", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.yml", + "spdx_license_key": "CC-BY-2.5", + "spdx_url": "https://spdx.org/licenses/CC-BY-2.5", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "cc-by-2.5_4.RULE", + "license_expression": "cc-by-2.5", + "licenses": [ + "cc-by-2.5" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 14, + "matched_length": 14, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc-by-2.5" + ], + "percentage_of_license_text": 19.72, + "copyrights": [ + { + "copyright": "Copyright (c) 2005 Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [ + { + "author": "Bela Ban", + "start_line": 10, + "end_line": 10 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://creativecommons.org/licenses/by/2.5", + "start_line": 5, + "end_line": 5 + }, + { + "url": "http://www.jcip.net/", + "start_line": 6, + "end_line": 6 + } + ], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/ImmutableReference.java", + "type": "file", + "name": "ImmutableReference.java", + "base_name": "ImmutableReference", + "extension": ".java", + "size": 1023, + "sha1": "aee1bb33424e7c1264f85c9aad40d43c3738f871", + "md5": "53a91ff66fdc4d812d7656b4e807bfd2", + "sha256": "ec1427fc2f7e322e6a4d5d99f8119310d6586aaaf5b30b2904b4ccd27966e120", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.62, + "copyrights": [ + { + "copyright": "Copyright 2010, Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.fsf.org/", + "start_line": 20, + "end_line": 20 + } + ], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RATE_LIMITER.java", + "type": "file", + "name": "RATE_LIMITER.java", + "base_name": "RATE_LIMITER", + "extension": ".java", + "size": 269, + "sha1": "8da19aa25da421608fbe9f4f5eeb122ab35fd01e", + "md5": "52540f80f5c22d8d13627c57b76d44f4", + "sha256": "c3bcefbbb2706f65410b4bb91d531e2ec461fa4586135becc8865adeca3385c8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 4, + "end_line": 4 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStub.java", + "type": "file", + "name": "RouterStub.java", + "base_name": "RouterStub", + "extension": ".java", + "size": 153, + "sha1": "c1baa345449b4b91e61886dadea8f1bbea034eb4", + "md5": "a0b4e3f4d679a98d11d75e7e27e894af", + "sha256": "5c0f94fc518daca08e74fd117fef09d6dd090b0fd623a47edde451be3aed28c7", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStubManager.java", + "type": "file", + "name": "RouterStubManager.java", + "base_name": "RouterStubManager", + "extension": ".java", + "size": 1032, + "sha1": "a51c5bbb738c1c1cd1f58c79060fa5ea4d0dd753", + "md5": "cae07c80e6f79864de002700bf9ab02f", + "sha256": "fe96061d23b37c98913379d54c5388cffdc99239807c2caf8c96d7d10321d085", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.12, + "copyrights": [ + { + "copyright": "Copyright 2009, Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.fsf.org/", + "start_line": 20, + "end_line": 20 + } + ], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/S3_PING.java", + "type": "file", + "name": "S3_PING.java", + "base_name": "S3_PING", + "extension": ".java", + "size": 252, + "sha1": "a7a9763832eb31e1f7f7927d6288df284b70c6e5", + "md5": "ffb481f2a0c6262d0f7d1e9a4681a6ca", + "sha256": "5470e41b0bfba6adb43649215df756f1a4a5173ceed6127af1b38801651efde2", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/README", + "type": "file", + "name": "README", + "base_name": "README", + "extension": "", + "size": 236, + "sha1": "2e07e32c52d607204fad196052d70e3d18fb8636", + "md5": "effc6856ef85a9250fb1a470792b3f38", + "sha256": "165da86bfdf296cd5a0a3e20c1d1ee86d70ecb8a1fa579d6f8cadad8eee85878", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://zlib.net/zlib-1.2.8.tar.gz", + "start_line": 3, + "end_line": 3 + }, + { + "url": "http://master.dl.sourceforge.net/project/javagroups/JGroups/2.10.0.GA/JGroups-2.10.0.GA.src.zip", + "start_line": 4, + "end_line": 4 + } + ], + "facets": [ + "docs" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch", + "type": "directory", + "name": "arch", + "base_name": "arch", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 3, + "dirs_count": 0, + "size_count": 1896, + "scan_errors": [] + }, + { + "path": "scan/arch/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 175, + "sha1": "a7ee5ea54da88a6390e72ff018dd471045d8bbf1", + "md5": "92011414f344e34f711e77bac40e4bc4", + "sha256": "e533accabdc7434f3905ced32c4fba755f707929ad73df6e07172cd5a786e023", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1326, + "sha1": "26610e5eab2a17e0fa9ef6ac791f25f77af145af", + "md5": "4ed53ac605f16247ab7d571670f2351d", + "sha256": "b09e2a43e9960d3d28d37d24f10dfbc462a4cb376da54ba571ac9a8874911ed5", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 69.57, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [ + { + "email": "jloup@gzip.org", + "start_line": 23, + "end_line": 23 + }, + { + "email": "madler@alumni.caltech.edu", + "start_line": 23, + "end_line": 23 + } + ], + "urls": [ + { + "url": "http://tools.ietf.org/html/rfc1950", + "start_line": 27, + "end_line": 27 + } + ], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/cc0-1.0.LICENSE", + "type": "file", + "name": "cc0-1.0.LICENSE", + "base_name": "cc0-1.0", + "extension": ".LICENSE", + "size": 6433, + "sha1": "172444e7c137eb5cd3cae530aca0879c90f7fada", + "md5": "57f047ea87f405486a94bc5a56ba7fcf", + "sha256": "963aabe87f6a51ca9c237669034a9fdecd71df7350eaf30bdf0718f63c5a94f8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "cc0-1.0", + "score": 99.69, + "name": "Creative Commons CC0 1.0 Universal", + "short_name": "CC0-1.0", + "category": "Public Domain", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/publicdomain/zero/1.0/", + "text_url": "http://creativecommons.org/publicdomain/zero/1.0/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc0-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.yml", + "spdx_license_key": "CC0-1.0", + "spdx_url": "https://spdx.org/licenses/CC0-1.0", + "start_line": 1, + "end_line": 98, + "matched_rule": { + "identifier": "cc0-1.0_155.RULE", + "license_expression": "cc0-1.0", + "licenses": [ + "cc0-1.0" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "3-seq", + "rule_length": 981, + "matched_length": 978, + "match_coverage": 99.69, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc0-1.0" + ], + "percentage_of_license_text": 100.0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/package.json", + "type": "file", + "name": "package.json", + "base_name": "package", + "extension": ".json", + "size": 37904, + "sha1": "dfc6c1274bd31b47d5cc482af0c0dad9d30eccaa", + "md5": "62b51527599b11b32361699c75b05683", + "sha256": "8b54b0b90570e4b0d5b8c8520e4b5a8258ae15849ec1919f57da093f5df84f38", + "mime_type": "application/json", + "file_type": "JSON data", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "artistic-2.0", + "score": 100.0, + "name": "Artistic License 2.0", + "short_name": "Artistic 2.0", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Perl Foundation", + "homepage_url": "http://www.perlfoundation.org/", + "text_url": "https://www.perlfoundation.org/artistic_license_2_0", + "reference_url": "https://scancode-licensedb.aboutcode.org/artistic-2.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.yml", + "spdx_license_key": "Artistic-2.0", + "spdx_url": "https://spdx.org/licenses/Artistic-2.0", + "start_line": 198, + "end_line": 198, + "matched_rule": { + "identifier": "artistic-2.0_46.RULE", + "license_expression": "artistic-2.0", + "licenses": [ + "artistic-2.0" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": true, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 4, + "matched_length": 4, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "artistic-2.0" + ], + "percentage_of_license_text": 0.1, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "name' Isaac Z.", + "start_line": 16, + "end_line": 17 + } + ], + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [ + { + "email": "i@izs.me", + "start_line": 18, + "end_line": 18 + }, + { + "email": "ssteinerX@gmail.com", + "start_line": 206, + "end_line": 206 + }, + { + "email": "mikeal.rogers@gmail.com", + "start_line": 210, + "end_line": 210 + }, + { + "email": "aaron.blohowiak@gmail.com", + "start_line": 214, + "end_line": 214 + }, + { + "email": "martyn@dollyfish.net.nz", + "start_line": 218, + "end_line": 218 + }, + { + "email": "charlie.robbins@gmail.com", + "start_line": 222, + "end_line": 222 + }, + { + "email": "francisco.treacy@gmail.com", + "start_line": 226, + "end_line": 226 + }, + { + "email": "cliffano@gmail.com", + "start_line": 230, + "end_line": 230 + }, + { + "email": "christian.eager@nokia.com", + "start_line": 234, + "end_line": 234 + }, + { + "email": "davglass@gmail.com", + "start_line": 238, + "end_line": 238 + }, + { + "email": "alexkwolfe@gmail.com", + "start_line": 242, + "end_line": 242 + }, + { + "email": "jimmyjazz14@gmail.com", + "start_line": 246, + "end_line": 246 + }, + { + "email": "me@reidburke.com", + "start_line": 250, + "end_line": 250 + }, + { + "email": "arlolra@gmail.com", + "start_line": 254, + "end_line": 254 + }, + { + "email": "teemow@gmail.com", + "start_line": 258, + "end_line": 258 + }, + { + "email": "bart.teeuwisse@thecodemill.biz", + "start_line": 262, + "end_line": 262 + }, + { + "email": "info@bnoordhuis.nl", + "start_line": 266, + "end_line": 266 + }, + { + "email": "tor.valamo@gmail.com", + "start_line": 270, + "end_line": 270 + }, + { + "email": "5longluna@gmail.com", + "start_line": 274, + "end_line": 274 + }, + { + "email": "olivier.melcher@gmail.com", + "start_line": 278, + "end_line": 278 + }, + { + "email": "kami@k5-storitve.net", + "start_line": 282, + "end_line": 282 + }, + { + "email": "evan.meagher@gmail.com", + "start_line": 286, + "end_line": 286 + }, + { + "email": "ovazquez@gmail.com", + "start_line": 290, + "end_line": 290 + }, + { + "email": "kaichenxyz@gmail.com", + "start_line": 294, + "end_line": 294 + }, + { + "email": "gmiroshnykov@lohika.com", + "start_line": 298, + "end_line": 298 + }, + { + "email": "geoff.flarity@gmail.com", + "start_line": 302, + "end_line": 302 + }, + { + "email": "c@chromakode.com", + "start_line": 306, + "end_line": 306 + }, + { + "email": "pete@kruckenberg.com", + "start_line": 310, + "end_line": 310 + }, + { + "email": "laurie@holoweb.net", + "start_line": 314, + "end_line": 314 + }, + { + "email": "chris@chriswongstudio.com", + "start_line": 318, + "end_line": 318 + }, + { + "email": "brons_github@rinspin.com", + "start_line": 322, + "end_line": 322 + }, + { + "email": "federomero@gmail.com", + "start_line": 326, + "end_line": 326 + }, + { + "email": "visnupx@gmail.com", + "start_line": 330, + "end_line": 330 + }, + { + "email": "rfobic@gmail.com", + "start_line": 334, + "end_line": 334 + }, + { + "email": "mark@tiemonster.info", + "start_line": 338, + "end_line": 338 + }, + { + "email": "zearin@gonk.net", + "start_line": 342, + "end_line": 342 + }, + { + "email": "iainsproat@gmail.com", + "start_line": 346, + "end_line": 346 + }, + { + "email": "trentm@gmail.com", + "start_line": 350, + "end_line": 350 + }, + { + "email": "felix@debuggable.com", + "start_line": 354, + "end_line": 354 + }, + { + "email": "t.jameson.little@gmail.com", + "start_line": 358, + "end_line": 358 + }, + { + "email": "conny@fuchsia.se", + "start_line": 362, + "end_line": 362 + }, + { + "email": "w.elwood08@gmail.com", + "start_line": 366, + "end_line": 366 + }, + { + "email": "dean@deanlandolt.com", + "start_line": 370, + "end_line": 370 + }, + { + "email": "efimovov@gmail.com", + "start_line": 374, + "end_line": 374 + }, + { + "email": "mfncooper@gmail.com", + "start_line": 378, + "end_line": 378 + }, + { + "email": "jannhorn@googlemail.com", + "start_line": 382, + "end_line": 382 + }, + { + "email": "cspotcode@gmail.com", + "start_line": 386, + "end_line": 386 + }, + { + "email": "me@mmalecki.com", + "start_line": 390, + "end_line": 390 + }, + { + "email": "glurgle@gmail.com", + "start_line": 394, + "end_line": 394 + }, + { + "email": "mbudde@gmail.com", + "start_line": 398, + "end_line": 398 + } + ], + "urls": [ + { + "url": "https://docs.npmjs.com/", + "start_line": 15, + "end_line": 15 + }, + { + "url": "http://blog.izs.me/", + "start_line": 19, + "end_line": 19 + }, + { + "url": "https://github.com/npm/npm.git", + "start_line": 23, + "end_line": 23 + }, + { + "url": "http://github.com/npm/npm/issues", + "start_line": 26, + "end_line": 26 + }, + { + "url": "http://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "start_line": 1549, + "end_line": 1549 + }, + { + "url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "start_line": 1569, + "end_line": 1569 + } + ], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib", + "type": "directory", + "name": "zlib", + "base_name": "zlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 13, + "dirs_count": 5, + "size_count": 7951, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada", + "type": "directory", + "name": "ada", + "base_name": "ada", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 2054, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada/zlib.ads", + "type": "file", + "name": "zlib.ads", + "base_name": "zlib", + "extension": ".ads", + "size": 2054, + "sha1": "93b3e6e5822c350a9c12e69a2848e29767777002", + "md5": "4e58eb393ad904c1de81a9ca5b9e392c", + "sha256": "8e6da5a880c0547bac5b71f0f123164511ae17e3c7d7f424e4ec5b44e1cae731", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "gpl-2.0-plus", + "score": 100.0, + "name": "GNU General Public License 2.0 or later", + "short_name": "GPL 2.0 or later", + "category": "Copyleft", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/gpl-2.0-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml", + "spdx_license_key": "GPL-2.0-or-later", + "spdx_url": "https://spdx.org/licenses/GPL-2.0-or-later", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + }, + { + "key": "ada-linking-exception", + "score": 100.0, + "name": "Ada linking exception to GPL 2.0 or later", + "short_name": "Ada linking exception to GPL 2.0 or later", + "category": "Copyleft Limited", + "is_exception": true, + "is_unknown": false, + "owner": "Dmitriy Anisimkov", + "homepage_url": null, + "text_url": "", + "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", + "spdx_license_key": "LicenseRef-scancode-ada-linking-exception", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "gpl-2.0-plus WITH ada-linking-exception" + ], + "percentage_of_license_text": 94.12, + "copyrights": [ + { + "copyright": "Copyright (c) 2002-2004 Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 179, + "sha1": "f98c6c82a570ac852801b46157c1540070d55358", + "md5": "48c4037f16b4670795fdf72e88cc278c", + "sha256": "fc1682e787ccc8d9eb83eb0b1f5acb59d22aa6ce1bff7c749a9dc315237b2240", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.c", + "type": "file", + "name": "deflate.c", + "base_name": "deflate", + "extension": ".c", + "size": 198, + "sha1": "4b4696c59e245cef0bad7334fdb63725ccfa218c", + "md5": "f11ed826baf25f2bfa9c610313460036", + "sha256": "ef7bf500e1accf7e91352788c92b5c6663bab52e2cd6c42284496518e4a5f054", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 40.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.h", + "type": "file", + "name": "deflate.h", + "base_name": "deflate", + "extension": ".h", + "size": 165, + "sha1": "a99a71ff971faf49a52ed6f7d3075fdffae8054b", + "md5": "d8821cd288e2be7fd83cdcac22a427ce", + "sha256": "a3c2fa63c7e730bdd008bc07b7d3865dc76781082b77a03d52a918ce1c7d3459", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib", + "type": "directory", + "name": "dotzlib", + "base_name": "dotzlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 2, + "dirs_count": 0, + "size_count": 863, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/AssemblyInfo.cs", + "type": "file", + "name": "AssemblyInfo.cs", + "base_name": "AssemblyInfo", + "extension": ".cs", + "size": 627, + "sha1": "cc7fcb4d721a7efe9eefa6bd2d9d0105d33203a8", + "md5": "dbd621f76cb27e2fd8b8e2d9d985ffcf", + "sha256": "8b257a625c537736ee3ac2321b4ef56ba8a6fa4f922a35b1a0e992f9327d39e9", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [ + { + "copyright": "Copyright (c) 2004 by Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/ChecksumImpl.cs", + "type": "file", + "name": "ChecksumImpl.cs", + "base_name": "ChecksumImpl", + "extension": ".cs", + "size": 236, + "sha1": "3043848212232cdde81eb3e20fca7f2447d944be", + "md5": "661652a0568e25d12fc9bfad2fdabfb2", + "sha256": "f3144ba734429b825e22c2f9048412e78c907e0142f2cdc629879b3a0fa63c89", + "mime_type": "text/plain", + "file_type": "UTF-8 Unicode text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "boost-1.0", + "score": 100.0, + "name": "Boost Software License 1.0", + "short_name": "Boost 1.0", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Boost", + "homepage_url": "http://www.boost.org/users/license.html", + "text_url": "http://www.boost.org/LICENSE_1_0.txt", + "reference_url": "https://scancode-licensedb.aboutcode.org/boost-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.yml", + "spdx_license_key": "BSL-1.0", + "spdx_url": "https://spdx.org/licenses/BSL-1.0", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "boost-1.0_21.RULE", + "license_expression": "boost-1.0", + "licenses": [ + "boost-1.0" + ], + "referenced_filenames": [ + "LICENSE_1_0.txt" + ], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 32, + "matched_length": 32, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "boost-1.0" + ], + "percentage_of_license_text": 88.89, + "copyrights": [ + { + "copyright": "Copyright Henrik Ravn 2004", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.boost.org/LICENSE_1_0.txt", + "start_line": 5, + "end_line": 5 + } + ], + "facets": [ + "dev" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64", + "type": "directory", + "name": "gcc_gvmat64", + "base_name": "gcc_gvmat64", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 1774, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64/gvmat64.S", + "type": "file", + "name": "gvmat64.S", + "base_name": "gvmat64", + "extension": ".S", + "size": 1774, + "sha1": "8dff93e95ccef023a871fb438784635b5df1d541", + "md5": "4f0d2f55d43d9466750350f8b27f0302", + "sha256": "1551b8fb1c2f1f3cc92c8e4f31730ebdde0c766caeca6d670a7758b55e3804f3", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "GAS", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 17, + "end_line": 31, + "matched_rule": { + "identifier": "zlib.LICENSE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 132, + "matched_length": 132, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "authors": [ + { + "author": "Gilles Vollant", + "start_line": 12, + "end_line": 12 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.zlib.net/", + "start_line": 33, + "end_line": 33 + }, + { + "url": "http://www.winimage.com/zLibDll", + "start_line": 34, + "end_line": 34 + }, + { + "url": "http://www.muppetlabs.com/~breadbox/software/assembly.html", + "start_line": 35, + "end_line": 35 + } + ], + "facets": [ + "data" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9", + "type": "directory", + "name": "infback9", + "base_name": "infback9", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 2, + "dirs_count": 0, + "size_count": 353, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.c", + "type": "file", + "name": "infback9.c", + "base_name": "infback9", + "extension": ".c", + "size": 185, + "sha1": "299f7a056cf0e0ed7d5bd687c53f3247d809cab2", + "md5": "d570bd029ee2362f2a0927c87999773b", + "sha256": "03fb435669b57aa90fe00c4dbc12d8492ef87b6243427d1e1831006994ee1f80", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 44.44, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2008 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "tests" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.h", + "type": "file", + "name": "infback9.h", + "base_name": "infback9", + "extension": ".h", + "size": 168, + "sha1": "c849edb4691d23e0db97d3f5da1cc5b396929449", + "md5": "2913c8ea7fb43a0f469bb2797c820a95", + "sha256": "4f8db049a7156b8a4616a6c9df0b5ee09571f0ac2eb253e111f2fb727fb033ea", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 2003 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "tests" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2", + "type": "directory", + "name": "iostream2", + "base_name": "iostream2", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "emails": [], + "urls": [], + "facets": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 649, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2/zstream.h", + "type": "file", + "name": "zstream.h", + "base_name": "zstream", + "extension": ".h", + "size": 649, + "sha1": "b7fe15df27e601b88cde6b6a63dad184ccbce572", + "md5": "8b897171ea0767232e586086bc94518c", + "sha256": "ee2eef602cba7c4ba350617f4154de50cb4cbf274c7dd773130aca0775d5d9cd", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "mit-old-style", + "score": 100.0, + "name": "MIT Old Style", + "short_name": "MIT Old Style", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "MIT", + "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.yml", + "spdx_license_key": "LicenseRef-scancode-mit-old-style", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "start_line": 9, + "end_line": 15, + "matched_rule": { + "identifier": "mit-old-style_cmr-no_1.RULE", + "license_expression": "mit-old-style", + "licenses": [ + "mit-old-style" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 71, + "matched_length": 71, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "mit-old-style" + ], + "percentage_of_license_text": 79.78, + "copyrights": [ + { + "copyright": "Copyright (c) 1997 Christian Michelsen Research AS Advanced Computing", + "start_line": 3, + "end_line": 5 + } + ], + "holders": [ + { + "holder": "Christian Michelsen Research AS Advanced Computing", + "start_line": 4, + "end_line": 5 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [ + { + "url": "http://www.cmr.no/", + "start_line": 7, + "end_line": 7 + } + ], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1103, + "sha1": "85c65180242c560a4df66e9882119bf70eaefd02", + "md5": "07497e2688dad9406386f0534a0bbfca", + "sha256": "64fef1f0a7cd69eae744ad2fa754ee8568a5715588e38b7a3fa6e11eaeaec97e", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 84.21, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [ + { + "email": "jloup@gzip.org", + "start_line": 23, + "end_line": 23 + }, + { + "email": "madler@alumni.caltech.edu", + "start_line": 23, + "end_line": 23 + } + ], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.c", + "type": "file", + "name": "zutil.c", + "base_name": "zutil", + "extension": ".c", + "size": 218, + "sha1": "2e846ef84cfb16e0e8b92c62a850a607a709d7b2", + "md5": "2a0ea6a99e31fb0989209a027476038d", + "sha256": "dc7224c7f079d237acf510ff40282cf6d50352c851d4e2957d227e2a3b57eb4d", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 37.5, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "emails": [], + "urls": [], + "facets": [ + "core" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/summarycode/data/full_summary/summary_details.expected.json b/tests/summarycode/data/full_summary/summary_details.expected.json new file mode 100644 index 00000000000..689edd3803f --- /dev/null +++ b/tests/summarycode/data/full_summary/summary_details.expected.json @@ -0,0 +1,10162 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--copyright": true, + "--info": true, + "--json-pp": "", + "--license": true, + "--package": true, + "--summary-with-details": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "3.0.0", + "message": null, + "errors": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 26 + } + } + ], + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/abbrev", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansi", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansicolors", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ansistyles", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/archy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/async-some", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/block-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/char-spinner", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chmodr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chownr", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/cmd-shim", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/columnify", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/config-chain", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/dezalgo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/editor", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-vacuum", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-write-stream-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fstream-npm", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-git", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github-url-from-username-repo", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/glob", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/graceful-fs", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/hosted-git-info", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inflight", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/inherits", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ini", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/init-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lockfile", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/lru-cache", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/minimatch", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/mkdirp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/node-gyp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nopt", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-git-url", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/normalize-package-data", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-cache-filename", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-install-checks", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-package-arg", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-client", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-user-validate", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npmlog", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/once", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/opener", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/osenv", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/path-is-inside", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-installed", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/read-package-json", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/readable-stream", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/realize-package-specifier", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/request", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/retry", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rimraf", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/semver", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sha", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/slide", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sorted-object", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/spdx", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tar", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/text-table", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/uid-number", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/umask", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-name", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/which", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/wrappy", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/write-file-atomic", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/validate-npm-package-license", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/deep-equal", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/marked-man", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/nock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-couchapp", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/npm-registry-mock", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/require-inject", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sprintf-js", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tap", + "for_package": "pkg:npm/npm@2.13.5", + "datafile_path": "scan/package.json" + } + ], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "package_uid": "pkg:npm/npm@2.13.5", + "package_data_files": [ + "scan/package.json" + ], + "files": [ + "scan/cc0-1.0.LICENSE", + "scan/package.json", + "scan/README", + "scan/arch/adler32.c", + "scan/arch/zlib.h", + "scan/arch/zutil.h", + "scan/JGroups/src/FixedMembershipToken.java", + "scan/JGroups/src/GuardedBy.java", + "scan/JGroups/src/ImmutableReference.java", + "scan/JGroups/src/RATE_LIMITER.java", + "scan/JGroups/src/RouterStub.java", + "scan/JGroups/src/RouterStubManager.java", + "scan/JGroups/src/S3_PING.java", + "scan/zlib/adler32.c", + "scan/zlib/deflate.c", + "scan/zlib/deflate.h", + "scan/zlib/zlib.h", + "scan/zlib/zutil.c", + "scan/zlib/zutil.h", + "scan/zlib/ada/zlib.ads", + "scan/zlib/dotzlib/AssemblyInfo.cs", + "scan/zlib/dotzlib/ChecksumImpl.cs", + "scan/zlib/gcc_gvmat64/gvmat64.S", + "scan/zlib/infback9/infback9.c", + "scan/zlib/infback9/infback9.h", + "scan/zlib/iostream2/zstream.h" + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 12 + }, + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "artistic-2.0", + "count": 1 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "cc-by-2.5", + "count": 1 + }, + { + "value": "cc0-1.0", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 6 + }, + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 4 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 4 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 6 + }, + { + "value": "Jean-loup Gailly", + "count": 4 + }, + { + "value": "Mark Adler", + "count": 4 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 20 + }, + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": "Gilles Vollant", + "count": 1 + }, + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 12 + }, + { + "value": "Java", + "count": 7 + }, + { + "value": "C#", + "count": 2 + }, + { + "value": "GAS", + "count": 1 + } + ] + }, + "files": [ + { + "path": "scan", + "type": "directory", + "name": "scan", + "base_name": "scan", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 12 + }, + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "artistic-2.0", + "count": 1 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "cc-by-2.5", + "count": 1 + }, + { + "value": "cc0-1.0", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 6 + }, + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 4 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 4 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 6 + }, + { + "value": "Jean-loup Gailly", + "count": 4 + }, + { + "value": "Mark Adler", + "count": 4 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 3 + }, + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 20 + }, + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": "Gilles Vollant", + "count": 1 + }, + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 12 + }, + { + "value": "Java", + "count": 7 + }, + { + "value": "C#", + "count": 2 + }, + { + "value": "GAS", + "count": 1 + } + ] + }, + "files_count": 26, + "dirs_count": 9, + "size_count": 58647, + "scan_errors": [] + }, + { + "path": "scan/JGroups", + "type": "directory", + "name": "JGroups", + "base_name": "JGroups", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "cc-by-2.5", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 3 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": null, + "count": 3 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 7 + } + ] + }, + "files_count": 7, + "dirs_count": 1, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src", + "type": "directory", + "name": "src", + "base_name": "src", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 3 + }, + { + "value": "cc-by-2.5", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 3 + }, + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 3 + }, + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + }, + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + }, + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + }, + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 4 + }, + { + "value": null, + "count": 3 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 7 + } + ] + }, + "files_count": 7, + "dirs_count": 0, + "size_count": 4227, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/FixedMembershipToken.java", + "type": "file", + "name": "FixedMembershipToken.java", + "base_name": "FixedMembershipToken", + "extension": ".java", + "size": 1016, + "sha1": "d0d55d2ae0842afee96695bcc8be939e763704ec", + "md5": "301dfe021b3b4076b9f8d49577205b44", + "sha256": "ff6dfac01c9b7ad9fcb5e646db83b482f5f720d981f0ca6c68828c5aa4ec784b", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 79.62, + "copyrights": [ + { + "copyright": "Copyright 2005, JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "JBoss Inc., and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright JBoss Inc., and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": "JBoss Inc., and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/GuardedBy.java", + "type": "file", + "name": "GuardedBy.java", + "base_name": "GuardedBy", + "extension": ".java", + "size": 482, + "sha1": "21ec75514ce72011c4e86c977505c024832c1b63", + "md5": "5165fdeefda7a55c13e44c5e56cac920", + "sha256": "8553411bf58f4ac35fc9e7d6142f11fc2fbef33e50a77f514a253135807afd44", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "cc-by-2.5", + "score": 100.0, + "name": "Creative Commons Attribution License 2.5", + "short_name": "CC-BY-2.5", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/licenses/by/2.5/", + "text_url": "http://creativecommons.org/licenses/by/2.5/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc-by-2.5", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc-by-2.5.yml", + "spdx_license_key": "CC-BY-2.5", + "spdx_url": "https://spdx.org/licenses/CC-BY-2.5", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "cc-by-2.5_4.RULE", + "license_expression": "cc-by-2.5", + "licenses": [ + "cc-by-2.5" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 14, + "matched_length": 14, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc-by-2.5" + ], + "percentage_of_license_text": 19.72, + "copyrights": [ + { + "copyright": "Copyright (c) 2005 Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Brian Goetz and Tim Peierls", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [ + { + "author": "Bela Ban", + "start_line": 10, + "end_line": 10 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "cc-by-2.5", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Brian Goetz and Tim Peierls", + "count": 1 + } + ], + "holders": [ + { + "value": "Brian Goetz and Tim Peierls", + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/ImmutableReference.java", + "type": "file", + "name": "ImmutableReference.java", + "base_name": "ImmutableReference", + "extension": ".java", + "size": 1023, + "sha1": "aee1bb33424e7c1264f85c9aad40d43c3738f871", + "md5": "53a91ff66fdc4d812d7656b4e807bfd2", + "sha256": "ec1427fc2f7e322e6a4d5d99f8119310d6586aaaf5b30b2904b4ccd27966e120", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.62, + "copyrights": [ + { + "copyright": "Copyright 2010, Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat, Inc. and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": "Red Hat, Inc. and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RATE_LIMITER.java", + "type": "file", + "name": "RATE_LIMITER.java", + "base_name": "RATE_LIMITER", + "extension": ".java", + "size": 269, + "sha1": "8da19aa25da421608fbe9f4f5eeb122ab35fd01e", + "md5": "52540f80f5c22d8d13627c57b76d44f4", + "sha256": "c3bcefbbb2706f65410b4bb91d531e2ec461fa4586135becc8865adeca3385c8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 4, + "end_line": 4 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStub.java", + "type": "file", + "name": "RouterStub.java", + "base_name": "RouterStub", + "extension": ".java", + "size": 153, + "sha1": "c1baa345449b4b91e61886dadea8f1bbea034eb4", + "md5": "a0b4e3f4d679a98d11d75e7e27e894af", + "sha256": "5c0f94fc518daca08e74fd117fef09d6dd090b0fd623a47edde451be3aed28c7", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/RouterStubManager.java", + "type": "file", + "name": "RouterStubManager.java", + "base_name": "RouterStubManager", + "extension": ".java", + "size": 1032, + "sha1": "a51c5bbb738c1c1cd1f58c79060fa5ea4d0dd753", + "md5": "cae07c80e6f79864de002700bf9ab02f", + "sha256": "fe96061d23b37c98913379d54c5388cffdc99239807c2caf8c96d7d10321d085", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "lgpl-2.1-plus", + "score": 100.0, + "name": "GNU Lesser General Public License 2.1 or later", + "short_name": "LGPL 2.1 or later", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/lgpl-2.1-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/lgpl-2.1-plus.yml", + "spdx_license_key": "LGPL-2.1-or-later", + "spdx_url": "https://spdx.org/licenses/LGPL-2.1-or-later", + "start_line": 7, + "end_line": 20, + "matched_rule": { + "identifier": "lgpl-2.1-plus_59.RULE", + "license_expression": "lgpl-2.1-plus", + "licenses": [ + "lgpl-2.1-plus" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 125, + "matched_length": 125, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "lgpl-2.1-plus" + ], + "percentage_of_license_text": 78.12, + "copyrights": [ + { + "copyright": "Copyright 2009, Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "holders": [ + { + "holder": "Red Hat Middleware LLC, and individual contributors", + "start_line": 3, + "end_line": 3 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "lgpl-2.1-plus", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright Red Hat Middleware LLC, and individual contributors", + "count": 1 + } + ], + "holders": [ + { + "value": "Red Hat Middleware LLC, and individual contributors", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/JGroups/src/S3_PING.java", + "type": "file", + "name": "S3_PING.java", + "base_name": "S3_PING", + "extension": ".java", + "size": 252, + "sha1": "a7a9763832eb31e1f7f7927d6288df284b70c6e5", + "md5": "ffb481f2a0c6262d0f7d1e9a4681a6ca", + "sha256": "5470e41b0bfba6adb43649215df756f1a4a5173ceed6127af1b38801651efde2", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "Java", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Bela Ban", + "start_line": 3, + "end_line": 3 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": "Bela Ban", + "count": 1 + } + ], + "programming_language": [ + { + "value": "Java", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/README", + "type": "file", + "name": "README", + "base_name": "README", + "extension": "", + "size": 236, + "sha1": "2e07e32c52d607204fad196052d70e3d18fb8636", + "md5": "effc6856ef85a9250fb1a470792b3f38", + "sha256": "165da86bfdf296cd5a0a3e20c1d1ee86d70ecb8a1fa579d6f8cadad8eee85878", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": null, + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch", + "type": "directory", + "name": "arch", + "base_name": "arch", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 3 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 1 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 1 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 1 + }, + { + "value": "Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 3 + } + ], + "programming_language": [ + { + "value": "C", + "count": 3 + } + ] + }, + "files_count": 3, + "dirs_count": 0, + "size_count": 1896, + "scan_errors": [] + }, + { + "path": "scan/arch/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 175, + "sha1": "a7ee5ea54da88a6390e72ff018dd471045d8bbf1", + "md5": "92011414f344e34f711e77bac40e4bc4", + "sha256": "e533accabdc7434f3905ced32c4fba755f707929ad73df6e07172cd5a786e023", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1326, + "sha1": "26610e5eab2a17e0fa9ef6ac791f25f77af145af", + "md5": "4ed53ac605f16247ab7d571670f2351d", + "sha256": "b09e2a43e9960d3d28d37d24f10dfbc462a4cb376da54ba571ac9a8874911ed5", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 69.57, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/arch/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/cc0-1.0.LICENSE", + "type": "file", + "name": "cc0-1.0.LICENSE", + "base_name": "cc0-1.0", + "extension": ".LICENSE", + "size": 6433, + "sha1": "172444e7c137eb5cd3cae530aca0879c90f7fada", + "md5": "57f047ea87f405486a94bc5a56ba7fcf", + "sha256": "963aabe87f6a51ca9c237669034a9fdecd71df7350eaf30bdf0718f63c5a94f8", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "cc0-1.0", + "score": 99.69, + "name": "Creative Commons CC0 1.0 Universal", + "short_name": "CC0-1.0", + "category": "Public Domain", + "is_exception": false, + "is_unknown": false, + "owner": "Creative Commons", + "homepage_url": "http://creativecommons.org/publicdomain/zero/1.0/", + "text_url": "http://creativecommons.org/publicdomain/zero/1.0/legalcode", + "reference_url": "https://scancode-licensedb.aboutcode.org/cc0-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/cc0-1.0.yml", + "spdx_license_key": "CC0-1.0", + "spdx_url": "https://spdx.org/licenses/CC0-1.0", + "start_line": 1, + "end_line": 98, + "matched_rule": { + "identifier": "cc0-1.0_155.RULE", + "license_expression": "cc0-1.0", + "licenses": [ + "cc0-1.0" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "3-seq", + "rule_length": 981, + "matched_length": 978, + "match_coverage": 99.69, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "cc0-1.0" + ], + "percentage_of_license_text": 100.0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "cc0-1.0", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": null, + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/package.json", + "type": "file", + "name": "package.json", + "base_name": "package", + "extension": ".json", + "size": 37904, + "sha1": "dfc6c1274bd31b47d5cc482af0c0dad9d30eccaa", + "md5": "62b51527599b11b32361699c75b05683", + "sha256": "8b54b0b90570e4b0d5b8c8520e4b5a8258ae15849ec1919f57da093f5df84f38", + "mime_type": "application/json", + "file_type": "JSON data", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "artistic-2.0", + "score": 100.0, + "name": "Artistic License 2.0", + "short_name": "Artistic 2.0", + "category": "Copyleft Limited", + "is_exception": false, + "is_unknown": false, + "owner": "Perl Foundation", + "homepage_url": "http://www.perlfoundation.org/", + "text_url": "https://www.perlfoundation.org/artistic_license_2_0", + "reference_url": "https://scancode-licensedb.aboutcode.org/artistic-2.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/artistic-2.0.yml", + "spdx_license_key": "Artistic-2.0", + "spdx_url": "https://spdx.org/licenses/Artistic-2.0", + "start_line": 198, + "end_line": 198, + "matched_rule": { + "identifier": "artistic-2.0_46.RULE", + "license_expression": "artistic-2.0", + "licenses": [ + "artistic-2.0" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": true, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 4, + "matched_length": 4, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "artistic-2.0" + ], + "percentage_of_license_text": 0.1, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "name' Isaac Z.", + "start_line": 16, + "end_line": 17 + } + ], + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "npm", + "version": "2.13.5", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "a package manager for JavaScript", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Steiner", + "email": "ssteinerX@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Blohowiak", + "email": "aaron.blohowiak@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martyn Smith", + "email": "martyn@dollyfish.net.nz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Francisco Treacy", + "email": "francisco.treacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cliffano Subagio", + "email": "cliffano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Eager", + "email": "christian.eager@nokia.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dav Glass", + "email": "davglass@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex K. Wolfe", + "email": "alexkwolfe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Sanders", + "email": "jimmyjazz14@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Reid Burke", + "email": "me@reidburke.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arlo Breault", + "email": "arlolra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Derstappen", + "email": "teemow@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bart Teeuwisse", + "email": "bart.teeuwisse@thecodemill.biz", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Noordhuis", + "email": "info@bnoordhuis.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tor Valamo", + "email": "tor.valamo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Whyme.Lyu", + "email": "5longluna@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Olivier Melcher", + "email": "olivier.melcher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Toma\u017e Muraus", + "email": "kami@k5-storitve.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Meagher", + "email": "evan.meagher@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Orlando Vazquez", + "email": "ovazquez@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kai Chen", + "email": "kaichenxyz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Miroshnykov", + "email": "gmiroshnykov@lohika.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Geoff Flarity", + "email": "geoff.flarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Max Goodman", + "email": "c@chromakode.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Pete Kruckenberg", + "email": "pete@kruckenberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Harper", + "email": "laurie@holoweb.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Wong", + "email": "chris@chriswongstudio.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Scott Bronson", + "email": "brons_github@rinspin.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Federico Romero", + "email": "federomero@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Visnu Pitiyanuvath", + "email": "visnupx@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Cahill", + "email": "mark@tiemonster.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tony", + "email": "zearin@gonk.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Iain Sproat", + "email": "iainsproat@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trent Mick", + "email": "trentm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Geisendo\u0308rfer", + "email": "felix@debuggable.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jameson Little", + "email": "t.jameson.little@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Conny Brunnkvist", + "email": "conny@fuchsia.se", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Will Elwood", + "email": "w.elwood08@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dean Landolt", + "email": "dean@deanlandolt.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oleg Efimov", + "email": "efimovov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Martin Cooper", + "email": "mfncooper@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jann Horn", + "email": "jannhorn@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Bradley", + "email": "cspotcode@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maciej Ma\u0142ecki", + "email": "me@mmalecki.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephen Sugden", + "email": "glurgle@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Budde", + "email": "mbudde@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Smith", + "email": "jhs@iriscouch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gautham Pai", + "email": "buzypi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Trejo", + "email": "david.daniel.trejo@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "George Ornbo", + "email": "george@shapeshed.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Oxley", + "email": "secoif@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tyler Green", + "email": "tyler.green2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dave Pacheco", + "email": "dap@joyent.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danila Gerasimov", + "email": "danila.gerasimov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rod Vagg", + "email": "rod@vagg.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christian Howe", + "email": "coderarity@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Lunny", + "email": "alunny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Henrik Hodne", + "email": "dvyjones@binaryhex.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Blackburn", + "email": "regality@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Windham", + "email": "kriswindham@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jens Grunert", + "email": "jens.grunert@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joost-Wim Boekesteijn", + "email": "joost-wim@boekesteijn.nl", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dalmais Maxence", + "email": "root@ip-10-195-202-5.ec2.internal", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcus Ekwall", + "email": "marcus.ekwall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aaron Stacy", + "email": "aaron.r.stacy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Phillip Howell", + "email": "phowell@cothm.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Halliday", + "email": "mail@substack.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremy Cantrell", + "email": "jmcantrell@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ribettes", + "email": "patlogan29@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Don Park", + "email": "donpark@docuverse.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kei Son", + "email": "heyacct@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicolas Morel", + "email": "marsup@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark Dube", + "email": "markisdee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maxim Bogushevich", + "email": "boga1@mail.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Meaglin", + "email": "Meaglin.wasabi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Evans", + "email": "ben@bensbit.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nathan Zadoks", + "email": "nathan@nathan7.eu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Brian White", + "email": "mscdex@mscdex.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jed Schmidt", + "email": "tr@nslator.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Livingstone", + "email": "ianl@cs.dal.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Patrick Pfeiffer", + "email": "patrick@buzzle.at", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paul Miller", + "email": "paul@paulmillr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Emery", + "email": "seebees@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Carl Lange", + "email": "carl@flax.ie", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jan Lehnardt", + "email": "jan@apache.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart P. Bentley", + "email": "stuart@testtrack4.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Sk\u00f6ld", + "email": "johan@skold.cc", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stuart Knightley", + "email": "stuart@stuartk.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Niggler", + "email": "nirk.niggler@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paolo Fragomeni", + "email": "paolo@async.ly", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jaakko Manninen", + "email": "jaakko@rocketpack.fi", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luke Arduini", + "email": "luke.arduini@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Larz Conwell", + "email": "larz@larz-laptop.(none)", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcel Klehr", + "email": "mklehr@gmx.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Kowalski", + "email": "rok@kowalski.gd", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forbes Lindesay", + "email": "forbes@lindesay.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vaz Allen", + "email": "vaz@tryptid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jake Verbaten", + "email": "raynos2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Schabse Laks", + "email": "Dev@SLaks.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Florian Margaine", + "email": "florian@margaine.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Johan Nordberg", + "email": "its@johan-nordberg.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ian Babrou", + "email": "ibobrik@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Di Wu", + "email": "dwu@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt McClure", + "email": "matt.mcclure@mapmyfitness.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Lunn", + "email": "matt@mattlunn.me.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexey Kreschuk", + "email": "akrsch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "elisee", + "email": "elisee@sparklin.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robert Gieseke", + "email": "robert.gieseke@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franc\u0327ois Frisch", + "email": "francoisfrisch@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Trevor Burnham", + "email": "tburnham@hubspot.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alan Shaw", + "email": "alan@freestyle-developments.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nicholas Kinsey", + "email": "pyro@feisty.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Paulo Cesar", + "email": "pauloc062@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Elan Shanker", + "email": "elan.shanker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jon Spencer", + "email": "jon@jonspencer.ca", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jason Diamond", + "email": "jason@diamond.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Maximilian Antoni", + "email": "mail@maxantoni.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thom Blake", + "email": "tblake@brightroll.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jess Martin", + "email": "jessmartin@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Spain Train", + "email": "michael.spainhower@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Rodionov", + "email": "p0deje@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Colyer", + "email": "matt@colyer.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyx990803@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bitspill", + "email": "bitspill+github@bitspill.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Falkenberg", + "email": "gabriel.falkenberg@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alexej Yaroshevich", + "email": "alex@qfox.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quim Calpe", + "email": "quim@kalpe.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Mason", + "email": "stevem@brandwatch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tom Huang", + "email": "hzlhu.dargon@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "CamilleM", + "email": "camille.moulin@alterway.fr", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "S\u00e9bastien Santoro", + "email": "dereckson@espace-win.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan Lucas", + "email": "evan@btc.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Quinn Slack", + "email": "qslack@qslack.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Kocharin", + "email": "alex@kocharin.ru", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daniel Santiago", + "email": "daniel.santiago@highlevelwebs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Denis Gladkikh", + "email": "outcoldman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Horton", + "email": "andrew.j.horton@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zeke Sikelianos", + "email": "zeke@sikelianos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Dylan Greene", + "email": "dylang@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Franck Cuny", + "email": "franck.cuny@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yeonghoon Park", + "email": "sola92@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rafael de Oleza", + "email": "rafa@spotify.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mikola Lysenko", + "email": "mikolalysenko@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Yazhong Liu", + "email": "yorkiefixer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Neil Gentleman", + "email": "ngentleman@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kris Kowal", + "email": "kris.kowal@cixar.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Gorbatchev", + "email": "alex.gorbatchev@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Shawn Wildermuth", + "email": "shawn@wildermuth.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wesley de Souza", + "email": "wesleywex@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "yoyoyogi", + "email": "yogesh.k@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J. Tangelder", + "email": "j.tangelder@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jean Lauliac", + "email": "jean@lauliac.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Kislyuk", + "email": "kislyuk@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julian Gruber", + "email": "julian@juliangruber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Benjamin Coe", + "email": "bencoe@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alex Ford", + "email": "Alex.Ford@CodeTunnel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Hickford", + "email": "matt.hickford@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sean McGivern", + "email": "sean.mcgivern@rightscale.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "C J Silverio", + "email": "ceejceej@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Robin Tweedie", + "email": "robin@songkick.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Miroslav Bajto\u0161", + "email": "miroslav@strongloop.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Glasser", + "email": "glasser@davidglasser.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gianluca Casati", + "email": "casati_gianluca@yahoo.it", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Forrest L Norvell", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karsten Tinnefeld", + "email": "k.tinnefeld@googlemail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan Burgers", + "email": "bryan@burgers.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Beitey", + "email": "david@davidjb.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Evan You", + "email": "yyou@google.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Zach Pomerantz", + "email": "zmp@umich.edu", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Williams", + "email": "cwilliams88@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "sudodoki", + "email": "smd.deluzion@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mick Thompson", + "email": "dthompson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Felix Rabe", + "email": "felix@rabe.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Hayes", + "email": "michael@hayes.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Dickinson", + "email": "christopher.s.dickinson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bradley Meck", + "email": "bradley.meck@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "GeJ", + "email": "geraud@gcu.info", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Terris", + "email": "atterris@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Nisi", + "email": "michael.nisi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "fengmk2", + "email": "fengmk2@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adam Meadows", + "email": "adam.meadows@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chulki Lee", + "email": "chulki.lee@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "\u4e0d\u56db", + "email": "busi.hyy@taobao.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "dead_horse", + "email": "dead_horse@qq.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kenan Yildirim", + "email": "kenan@kenany.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Laurie Voss", + "email": "git@seldo.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rebecca Turner", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter Richardson", + "email": "github@zoomy.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jussi Kalliokoski", + "email": "jussi.kalliokoski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Filip Weiss", + "email": "me@fiws.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Timo Wei\u00df", + "email": "timoweiss@Timo-MBP.local", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Christopher Hiller", + "email": "chiller@badwing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "J\u00e9r\u00e9my Lal", + "email": "kapouer@melix.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anders Janmyr", + "email": "anders@janmyr.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Chris Meyers", + "email": "chris.meyers.fsu@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ludwig Magnusson", + "email": "ludwig@mediatool.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Wout Mertens", + "email": "Wout.Mertens@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Santos", + "email": "nick@medium.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Terin Stock", + "email": "terinjokes@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Faiq Raza", + "email": "faiqrazarizvi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Torp", + "email": "thomas@erupt.no", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Sam Mikes", + "email": "smikes@cubane.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mat Tyndall", + "email": "mat.tyndall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tauren Mills", + "email": "tauren@sportzing.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ron Martinez", + "email": "ramartin.net@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kazuhito Hokamura", + "email": "k.hokamura@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tristan Davies", + "email": "github@tristan.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Volm", + "email": "david@volminator.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Lin Clark", + "email": "lin.w.clark@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ben Page", + "email": "bpage@dewalch.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Jo", + "email": "jeffjo@squareup.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "martinvd", + "email": "martinvdpub@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mark J. Titorenko", + "email": "nospam-github.com@titorenko.net", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oddur Sigurdsson", + "email": "oddurs@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eric Mill", + "email": "eric@konklone.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gabriel Barros", + "email": "descartavel1@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "KevinSheedy", + "email": "kevinsheedy@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aleksey Smolenchuk", + "email": "aleksey@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ed Morley", + "email": "emorley@mozilla.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrey Fedorov", + "email": "anfedorov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Daijiro Wachi", + "email": "daijiro.wachi@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Luc Thevenard", + "email": "lucthevenard@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Aria Stewart", + "email": "aredridel@nbtsc.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charlie Rudolph", + "email": "charles.w.rudolph@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Vladimir Rutsky", + "email": "rutsky@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Isaac Murchie", + "email": "isaac@saucelabs.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Marcin Wosinek", + "email": "marcin.wosinek@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "David Marr", + "email": "davemarr@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryan English", + "email": "bryan@bryanenglish.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Anthony Zotti", + "email": "amZotti@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karl Horky", + "email": "karl.horky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Gu\u00f0laugur Stef\u00e1n Egilsson", + "email": "gulli@kolibri.is", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Helge Skogly Holm", + "email": "helge.holm@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Peter A. Shevtsov", + "email": "petr.shevtsov@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Alain Kalker", + "email": "a.c.kalker@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Bryant Williams", + "email": "b.n.williams@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jonas Weber", + "email": "github@jonasw.de", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Tim Whidden", + "email": "twhid@twhid.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andreas", + "email": "functino@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Karolis Narkevicius", + "email": "karolis.n@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Adrian Lynch", + "email": "adi_ady_ade@hotmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Richard Littauer", + "email": "richard.littauer@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Oli Evans", + "email": "oli@zilla.org.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Brennan", + "email": "mattyb1000@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeff Barczewski", + "email": "jeff.barczewski@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Danny Fritz", + "email": "dannyfritz@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Takaya Kobayashi", + "email": "jigsaw@live.jp", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ra'Shaun Stovall", + "email": "rashaunstovall@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Julien Meddah", + "email": "julien.meddah@deveryware.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michiel Sikma", + "email": "michiel@wedemandhtml.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jakob Krigovsky", + "email": "jakob.krigovsky@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Charmander", + "email": "~@charmander.me", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Erik Wienhold", + "email": "git@ewie.name", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Butler", + "email": "james.butler@sandfox.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kevin Kragenbrink", + "email": "kevin@gaikai.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Arnaud Rinquin", + "email": "rinquin.arnaud@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Mike MacCana", + "email": "mike.maccana@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Antti Mattila", + "email": "anttti@fastmail.fm", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "laiso", + "email": "laiso@lai.so", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Matt Zorn", + "email": "zornme@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle Mitchell", + "email": "kyle@kemitchell.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Michael Klein", + "email": "mischkl@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Simen Bekkhus", + "email": "sbekkhus91@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Victor", + "email": "victor.shih@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "thefourtheye", + "email": "thechargingvolcano@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Clay Carpenter", + "email": "claycarpenter@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "bangbang93", + "email": "bangbang93@163.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Malaguti", + "email": "nmalaguti@palantir.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Cedric Nelson", + "email": "cedric.nelson@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kat March\u00e1n", + "email": "kzm@sykosomatic.org", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew", + "email": "talktome@aboutandrew.co.uk", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eduardo Pinho", + "email": "enet4mikeenet@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Rachel Hutchison", + "email": "rhutchix@intel.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Ryan Temple", + "email": "ryantemple145@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Eugene Sharygin", + "email": "eush77@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Nick Heiner", + "email": "nick.heiner@opower.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "James Talmage", + "email": "james@talmage.io", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "jane arc", + "email": "jane@uber.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joseph Dykstra", + "email": "josephdykstra@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Joshua Egan", + "email": "josh-egan@users.noreply.github.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thomas Cort", + "email": "thomasc@ssimicro.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Thaddee Tyl", + "email": "thaddee.tyl@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Steve Klabnik", + "email": "steve@steveklabnik.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Andrew Murray", + "email": "radarhere@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Stephan B\u00f6nnemann", + "email": "stephan@excellenteasy.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Kyle M. Tarplee", + "email": "kyle.tarplee@numerica.us", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Derek Peterson", + "email": "derekpetey@gmail.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "Greg Whiteley", + "email": "greg.whiteley@atomos.com", + "url": null + }, + { + "type": "person", + "role": "contributor", + "name": "murgatroid99", + "email": "mlumish@google.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "isaacs", + "email": "isaacs@npmjs.com", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "othiym23", + "email": "ogd@aoaioxxysz.net", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "iarna", + "email": "me@re-becca.org", + "url": null + }, + { + "type": "person", + "role": "maintainer", + "name": "zkat", + "email": "kat@sykosomatic.org", + "url": null + } + ], + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "homepage_url": "https://docs.npmjs.com/", + "download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "size": null, + "sha1": "a124386bce4a90506f28ad4b1d1a804a17baaf32", + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "http://github.com/npm/npm/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/npm/npm.git@fc7bbf03e39cc48a8924b90696d28345a6a90f3c", + "copyright": null, + "license_expression": "artistic-2.0", + "declared_license": [ + "Artistic-2.0" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/abbrev", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansi", + "extracted_requirement": "~0.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansicolors", + "extracted_requirement": "~0.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ansistyles", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/archy", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/async-some", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/block-stream", + "extracted_requirement": "0.0.8", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/char-spinner", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chmodr", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chownr", + "extracted_requirement": "0.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/cmd-shim", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/columnify", + "extracted_requirement": "~1.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/config-chain", + "extracted_requirement": "~1.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/dezalgo", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/editor", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-vacuum", + "extracted_requirement": "~1.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-write-stream-atomic", + "extracted_requirement": "~1.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream", + "extracted_requirement": "~1.0.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fstream-npm", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-git", + "extracted_requirement": "~1.4.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github-url-from-username-repo", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "~5.0.14", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/graceful-fs", + "extracted_requirement": "~4.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/hosted-git-info", + "extracted_requirement": "~2.1.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inflight", + "extracted_requirement": "~1.0.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/inherits", + "extracted_requirement": "~2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ini", + "extracted_requirement": "~1.3.4", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/init-package-json", + "extracted_requirement": "~1.7.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lockfile", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/lru-cache", + "extracted_requirement": "~2.6.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/minimatch", + "extracted_requirement": "~2.0.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/mkdirp", + "extracted_requirement": "~0.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/node-gyp", + "extracted_requirement": "~2.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nopt", + "extracted_requirement": "~3.0.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-git-url", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/normalize-package-data", + "extracted_requirement": "~2.3.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-cache-filename", + "extracted_requirement": "~1.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-install-checks", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-package-arg", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-client", + "extracted_requirement": "~6.5.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-user-validate", + "extracted_requirement": "~0.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npmlog", + "extracted_requirement": "~1.2.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/once", + "extracted_requirement": "~1.3.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/opener", + "extracted_requirement": "~1.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/osenv", + "extracted_requirement": "~0.1.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/path-is-inside", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read", + "extracted_requirement": "~1.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-installed", + "extracted_requirement": "~4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/read-package-json", + "extracted_requirement": "~2.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/readable-stream", + "extracted_requirement": "~1.1.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/realize-package-specifier", + "extracted_requirement": "~3.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/request", + "extracted_requirement": "~2.60.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/retry", + "extracted_requirement": "~0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "~2.4.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/semver", + "extracted_requirement": "~5.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sha", + "extracted_requirement": "~1.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/slide", + "extracted_requirement": "~1.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sorted-object", + "extracted_requirement": "~1.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/spdx", + "extracted_requirement": "~0.4.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tar", + "extracted_requirement": "~2.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/text-table", + "extracted_requirement": "~0.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/uid-number", + "extracted_requirement": "0.0.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/umask", + "extracted_requirement": "~1.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-name", + "extracted_requirement": "~2.2.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/which", + "extracted_requirement": "~1.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/wrappy", + "extracted_requirement": "~1.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/write-file-atomic", + "extracted_requirement": "~1.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/validate-npm-package-license", + "extracted_requirement": "*", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/deep-equal", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked", + "extracted_requirement": "~0.3.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/marked-man", + "extracted_requirement": "~0.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/nock", + "extracted_requirement": "~2.10.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-couchapp", + "extracted_requirement": "~2.6.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/npm-registry-mock", + "extracted_requirement": "~1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/require-inject", + "extracted_requirement": "~1.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sprintf-js", + "extracted_requirement": "~1.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tap", + "extracted_requirement": "~1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "purl": "pkg:npm/npm@2.13.5", + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + } + ], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "artistic-2.0", + "count": 1 + } + ], + "copyrights": [ + { + "value": null, + "count": 1 + } + ], + "holders": [ + { + "value": null, + "count": 1 + } + ], + "authors": [ + { + "value": "name' Isaac Z.", + "count": 1 + } + ], + "programming_language": [ + { + "value": null, + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib", + "type": "directory", + "name": "zlib", + "base_name": "zlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 9 + }, + { + "value": "boost-1.0", + "count": 1 + }, + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + }, + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 3 + }, + { + "value": "Copyright (c) Mark Adler", + "count": 3 + }, + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 2 + }, + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + }, + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 3 + }, + { + "value": "Mark Adler", + "count": 3 + }, + { + "value": "Henrik Ravn", + "count": 2 + }, + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 2 + }, + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + }, + { + "value": "Dmitriy Anisimkov", + "count": 1 + }, + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 12 + }, + { + "value": "Gilles Vollant", + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 9 + }, + { + "value": "C#", + "count": 2 + }, + { + "value": "GAS", + "count": 1 + } + ] + }, + "files_count": 13, + "dirs_count": 5, + "size_count": 7951, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada", + "type": "directory", + "name": "ada", + "base_name": "ada", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + } + ], + "holders": [ + { + "value": "Dmitriy Anisimkov", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [] + }, + "files_count": 1, + "dirs_count": 0, + "size_count": 2054, + "scan_errors": [] + }, + { + "path": "scan/zlib/ada/zlib.ads", + "type": "file", + "name": "zlib.ads", + "base_name": "zlib", + "extension": ".ads", + "size": 2054, + "sha1": "93b3e6e5822c350a9c12e69a2848e29767777002", + "md5": "4e58eb393ad904c1de81a9ca5b9e392c", + "sha256": "8e6da5a880c0547bac5b71f0f123164511ae17e3c7d7f424e4ec5b44e1cae731", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [ + { + "key": "gpl-2.0-plus", + "score": 100.0, + "name": "GNU General Public License 2.0 or later", + "short_name": "GPL 2.0 or later", + "category": "Copyleft", + "is_exception": false, + "is_unknown": false, + "owner": "Free Software Foundation (FSF)", + "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "text_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/gpl-2.0-plus", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gpl-2.0-plus.yml", + "spdx_license_key": "GPL-2.0-or-later", + "spdx_url": "https://spdx.org/licenses/GPL-2.0-or-later", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + }, + { + "key": "ada-linking-exception", + "score": 100.0, + "name": "Ada linking exception to GPL 2.0 or later", + "short_name": "Ada linking exception to GPL 2.0 or later", + "category": "Copyleft Limited", + "is_exception": true, + "is_unknown": false, + "owner": "Dmitriy Anisimkov", + "homepage_url": null, + "text_url": "", + "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", + "spdx_license_key": "LicenseRef-scancode-ada-linking-exception", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", + "start_line": 6, + "end_line": 25, + "matched_rule": { + "identifier": "gpl-2.0-plus_with_ada-linking-exception_1.RULE", + "license_expression": "gpl-2.0-plus WITH ada-linking-exception", + "licenses": [ + "gpl-2.0-plus", + "ada-linking-exception" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 176, + "matched_length": 176, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "gpl-2.0-plus WITH ada-linking-exception" + ], + "percentage_of_license_text": 94.12, + "copyrights": [ + { + "copyright": "Copyright (c) 2002-2004 Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Dmitriy Anisimkov", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "gpl-2.0-plus WITH ada-linking-exception", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Dmitriy Anisimkov", + "count": 1 + } + ], + "holders": [ + { + "value": "Dmitriy Anisimkov", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": null, + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/adler32.c", + "type": "file", + "name": "adler32.c", + "base_name": "adler32", + "extension": ".c", + "size": 179, + "sha1": "f98c6c82a570ac852801b46157c1540070d55358", + "md5": "48c4037f16b4670795fdf72e88cc278c", + "sha256": "fc1682e787ccc8d9eb83eb0b1f5acb59d22aa6ce1bff7c749a9dc315237b2240", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 42.86, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2011 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.c", + "type": "file", + "name": "deflate.c", + "base_name": "deflate", + "extension": ".c", + "size": 198, + "sha1": "4b4696c59e245cef0bad7334fdb63725ccfa218c", + "md5": "f11ed826baf25f2bfa9c610313460036", + "sha256": "ef7bf500e1accf7e91352788c92b5c6663bab52e2cd6c42284496518e4a5f054", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 40.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/deflate.h", + "type": "file", + "name": "deflate.h", + "base_name": "deflate", + "extension": ".h", + "size": 165, + "sha1": "a99a71ff971faf49a52ed6f7d3075fdffae8054b", + "md5": "d8821cd288e2be7fd83cdcac22a427ce", + "sha256": "a3c2fa63c7e730bdd008bc07b7d3865dc76781082b77a03d52a918ce1c7d3459", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib", + "type": "directory", + "name": "dotzlib", + "base_name": "dotzlib", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "boost-1.0", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + }, + { + "value": "Copyright Henrik Ravn", + "count": 1 + } + ], + "holders": [ + { + "value": "Henrik Ravn", + "count": 2 + } + ], + "authors": [ + { + "value": null, + "count": 2 + } + ], + "programming_language": [ + { + "value": "C#", + "count": 2 + } + ] + }, + "files_count": 2, + "dirs_count": 0, + "size_count": 863, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/AssemblyInfo.cs", + "type": "file", + "name": "AssemblyInfo.cs", + "base_name": "AssemblyInfo", + "extension": ".cs", + "size": 627, + "sha1": "cc7fcb4d721a7efe9eefa6bd2d9d0105d33203a8", + "md5": "dbd621f76cb27e2fd8b8e2d9d985ffcf", + "sha256": "8b257a625c537736ee3ac2321b4ef56ba8a6fa4f922a35b1a0e992f9327d39e9", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [ + { + "copyright": "Copyright (c) 2004 by Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 14, + "end_line": 14 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) by Henrik Ravn", + "count": 1 + } + ], + "holders": [ + { + "value": "Henrik Ravn", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C#", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/dotzlib/ChecksumImpl.cs", + "type": "file", + "name": "ChecksumImpl.cs", + "base_name": "ChecksumImpl", + "extension": ".cs", + "size": 236, + "sha1": "3043848212232cdde81eb3e20fca7f2447d944be", + "md5": "661652a0568e25d12fc9bfad2fdabfb2", + "sha256": "f3144ba734429b825e22c2f9048412e78c907e0142f2cdc629879b3a0fa63c89", + "mime_type": "text/plain", + "file_type": "UTF-8 Unicode text, with CRLF line terminators", + "programming_language": "C#", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "boost-1.0", + "score": 100.0, + "name": "Boost Software License 1.0", + "short_name": "Boost 1.0", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Boost", + "homepage_url": "http://www.boost.org/users/license.html", + "text_url": "http://www.boost.org/LICENSE_1_0.txt", + "reference_url": "https://scancode-licensedb.aboutcode.org/boost-1.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-1.0.yml", + "spdx_license_key": "BSL-1.0", + "spdx_url": "https://spdx.org/licenses/BSL-1.0", + "start_line": 4, + "end_line": 5, + "matched_rule": { + "identifier": "boost-1.0_21.RULE", + "license_expression": "boost-1.0", + "licenses": [ + "boost-1.0" + ], + "referenced_filenames": [ + "LICENSE_1_0.txt" + ], + "is_license_text": false, + "is_license_notice": true, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 32, + "matched_length": 32, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "boost-1.0" + ], + "percentage_of_license_text": 88.89, + "copyrights": [ + { + "copyright": "Copyright Henrik Ravn 2004", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Henrik Ravn", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "boost-1.0", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright Henrik Ravn", + "count": 1 + } + ], + "holders": [ + { + "value": "Henrik Ravn", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C#", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64", + "type": "directory", + "name": "gcc_gvmat64", + "base_name": "gcc_gvmat64", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "authors": [ + { + "value": "Gilles Vollant", + "count": 1 + } + ], + "programming_language": [ + { + "value": "GAS", + "count": 1 + } + ] + }, + "files_count": 1, + "dirs_count": 0, + "size_count": 1774, + "scan_errors": [] + }, + { + "path": "scan/zlib/gcc_gvmat64/gvmat64.S", + "type": "file", + "name": "gvmat64.S", + "base_name": "gvmat64", + "extension": ".S", + "size": 1774, + "sha1": "8dff93e95ccef023a871fb438784635b5df1d541", + "md5": "4f0d2f55d43d9466750350f8b27f0302", + "sha256": "1551b8fb1c2f1f3cc92c8e4f31730ebdde0c766caeca6d670a7758b55e3804f3", + "mime_type": "text/plain", + "file_type": "ASCII text, with CRLF line terminators", + "programming_language": "GAS", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 17, + "end_line": 31, + "matched_rule": { + "identifier": "zlib.LICENSE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 132, + "matched_length": 132, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "start_line": 10, + "end_line": 10 + } + ], + "authors": [ + { + "author": "Gilles Vollant", + "start_line": 12, + "end_line": 12 + } + ], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly, Brian Raiter and Gilles Vollant", + "count": 1 + } + ], + "authors": [ + { + "value": "Gilles Vollant", + "count": 1 + } + ], + "programming_language": [ + { + "value": "GAS", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9", + "type": "directory", + "name": "infback9", + "base_name": "infback9", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 2 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 2 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 2 + } + ], + "authors": [ + { + "value": null, + "count": 2 + } + ], + "programming_language": [ + { + "value": "C", + "count": 2 + } + ] + }, + "files_count": 2, + "dirs_count": 0, + "size_count": 353, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.c", + "type": "file", + "name": "infback9.c", + "base_name": "infback9", + "extension": ".c", + "size": 185, + "sha1": "299f7a056cf0e0ed7d5bd687c53f3247d809cab2", + "md5": "d570bd029ee2362f2a0927c87999773b", + "sha256": "03fb435669b57aa90fe00c4dbc12d8492ef87b6243427d1e1831006994ee1f80", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 44.44, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2008 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/infback9/infback9.h", + "type": "file", + "name": "infback9.h", + "base_name": "infback9", + "extension": ".h", + "size": 168, + "sha1": "c849edb4691d23e0db97d3f5da1cc5b396929449", + "md5": "2913c8ea7fb43a0f469bb2797c820a95", + "sha256": "4f8db049a7156b8a4616a6c9df0b5ee09571f0ac2eb253e111f2fb727fb033ea", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 50.0, + "copyrights": [ + { + "copyright": "Copyright (c) 2003 Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Mark Adler", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2", + "type": "directory", + "name": "iostream2", + "base_name": "iostream2", + "extension": "", + "size": 0, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "licenses": [], + "license_expressions": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [], + "for_packages": [], + "summary": { + "license_expressions": [ + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "holders": [ + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 1, + "dirs_count": 0, + "size_count": 649, + "scan_errors": [] + }, + { + "path": "scan/zlib/iostream2/zstream.h", + "type": "file", + "name": "zstream.h", + "base_name": "zstream", + "extension": ".h", + "size": 649, + "sha1": "b7fe15df27e601b88cde6b6a63dad184ccbce572", + "md5": "8b897171ea0767232e586086bc94518c", + "sha256": "ee2eef602cba7c4ba350617f4154de50cb4cbf274c7dd773130aca0775d5d9cd", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "mit-old-style", + "score": 100.0, + "name": "MIT Old Style", + "short_name": "MIT Old Style", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "MIT", + "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", + "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.yml", + "spdx_license_key": "LicenseRef-scancode-mit-old-style", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE", + "start_line": 9, + "end_line": 15, + "matched_rule": { + "identifier": "mit-old-style_cmr-no_1.RULE", + "license_expression": "mit-old-style", + "licenses": [ + "mit-old-style" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 71, + "matched_length": 71, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "mit-old-style" + ], + "percentage_of_license_text": 79.78, + "copyrights": [ + { + "copyright": "Copyright (c) 1997 Christian Michelsen Research AS Advanced Computing", + "start_line": 3, + "end_line": 5 + } + ], + "holders": [ + { + "holder": "Christian Michelsen Research AS Advanced Computing", + "start_line": 4, + "end_line": 5 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "mit-old-style", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "holders": [ + { + "value": "Christian Michelsen Research AS Advanced Computing", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zlib.h", + "type": "file", + "name": "zlib.h", + "base_name": "zlib", + "extension": ".h", + "size": 1103, + "sha1": "85c65180242c560a4df66e9882119bf70eaefd02", + "md5": "07497e2688dad9406386f0534a0bbfca", + "sha256": "64fef1f0a7cd69eae744ad2fa754ee8568a5715588e38b7a3fa6e11eaeaec97e", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 6, + "end_line": 23, + "matched_rule": { + "identifier": "zlib_17.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 144, + "matched_length": 144, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 84.21, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly and Mark Adler", + "start_line": 4, + "end_line": 4 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly and Mark Adler", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.c", + "type": "file", + "name": "zutil.c", + "base_name": "zutil", + "extension": ".c", + "size": 218, + "sha1": "2e846ef84cfb16e0e8b92c62a850a607a709d7b2", + "md5": "2a0ea6a99e31fb0989209a027476038d", + "sha256": "dc7224c7f079d237acf510ff40282cf6d50352c851d4e2957d227e2a3b57eb4d", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 37.5, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "scan/zlib/zutil.h", + "type": "file", + "name": "zutil.h", + "base_name": "zutil", + "extension": ".h", + "size": 395, + "sha1": "830fca8d60bd0d0d91f6354d83ec8bf118a20e64", + "md5": "807b91d2bf5e18de555e56de37e487d1", + "sha256": "3980fa5633b16f944641bf2fba3f49b8b9b9de6ffea7be1e142792393bf1a867", + "mime_type": "text/plain", + "file_type": "ASCII text", + "programming_language": "C", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": true, + "is_script": false, + "licenses": [ + { + "key": "zlib", + "score": 100.0, + "name": "ZLIB License", + "short_name": "ZLIB License", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "zlib", + "homepage_url": "http://www.zlib.net/", + "text_url": "http://www.gzip.org/zlib/zlib_license.html", + "reference_url": "https://scancode-licensedb.aboutcode.org/zlib", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/zlib.yml", + "spdx_license_key": "Zlib", + "spdx_url": "https://spdx.org/licenses/Zlib", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "zlib_5.RULE", + "license_expression": "zlib", + "licenses": [ + "zlib" + ], + "referenced_filenames": [ + "zlib.h" + ], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": true, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100 + } + } + ], + "license_expressions": [ + "zlib" + ], + "percentage_of_license_text": 20.34, + "copyrights": [ + { + "copyright": "Copyright (c) 1995-2013 Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "holders": [ + { + "holder": "Jean-loup Gailly", + "start_line": 2, + "end_line": 2 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/npm@2.13.5" + ], + "summary": { + "license_expressions": [ + { + "value": "zlib", + "count": 1 + } + ], + "copyrights": [ + { + "value": "Copyright (c) Jean-loup Gailly", + "count": 1 + } + ], + "holders": [ + { + "value": "Jean-loup Gailly", + "count": 1 + } + ], + "authors": [ + { + "value": null, + "count": 1 + } + ], + "programming_language": [ + { + "value": "C", + "count": 1 + } + ] + }, + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/summarycode/data/packages/expected.json b/tests/summarycode/data/packages/expected.json new file mode 100644 index 00000000000..912b83af6b1 --- /dev/null +++ b/tests/summarycode/data/packages/expected.json @@ -0,0 +1,1756 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "options": { + "input": "", + "--json-pp": "", + "--package": true, + "--summary": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "output_format_version": "2.0.0", + "message": null, + "errors": [], + "extra_data": { + "spdx_license_list_version": "3.16", + "files_count": 3 + } + } + ], + "dependencies": [ + { + "purl": "pkg:npm/%40angular-devkit/build-optimizer", + "extracted_requirement": "^0.0.31", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular-devkit/build-optimizer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/autoprefixer", + "extracted_requirement": "^7.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/autoprefixer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/chalk", + "extracted_requirement": "^2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chalk?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/chokidar", + "extracted_requirement": "^1.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/chokidar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/clean-css", + "extracted_requirement": "^4.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/clean-css?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/cross-spawn", + "extracted_requirement": "^5.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/cross-spawn?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/express", + "extracted_requirement": "^4.16.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/express?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/fs-extra", + "extracted_requirement": "^4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/fs-extra?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "^7.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/json-loader", + "extracted_requirement": "^0.5.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/json-loader?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/node-sass", + "extracted_requirement": "^4.5.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/node-sass?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/os-name", + "extracted_requirement": "^2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/os-name?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/postcss", + "extracted_requirement": "^6.0.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/postcss?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/proxy-middleware", + "extracted_requirement": "^0.15.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/proxy-middleware?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/reflect-metadata", + "extracted_requirement": "^0.1.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/reflect-metadata?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rollup", + "extracted_requirement": "0.50.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rollup?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rollup-plugin-commonjs", + "extracted_requirement": "8.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rollup-plugin-commonjs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rollup-plugin-node-resolve", + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rollup-plugin-node-resolve?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/source-map", + "extracted_requirement": "^0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/source-map?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/tiny-lr", + "extracted_requirement": "^1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tiny-lr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/tslint", + "extracted_requirement": "^5.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tslint?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/tslint-eslint-rules", + "extracted_requirement": "^4.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tslint-eslint-rules?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/uglify-es", + "extracted_requirement": "^3.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/uglify-es?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/webpack", + "extracted_requirement": "^3.8.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/webpack?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/ws", + "extracted_requirement": "^3.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ws?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/xml2js", + "extracted_requirement": "^0.4.19", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/xml2js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/animations", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/animations?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/common", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/common?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/compiler", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/compiler?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/compiler-cli", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/compiler-cli?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/core", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/forms", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/forms?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/http", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/http?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/platform-browser", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/platform-browser?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/platform-browser-dynamic", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/platform-browser-dynamic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/platform-server", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/platform-server?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40angular/tsc-wrapped", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40angular/tsc-wrapped?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/chokidar", + "extracted_requirement": "^1.7.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/chokidar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/clean-css", + "extracted_requirement": "^3.4.29", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/clean-css?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/express", + "extracted_requirement": "^4.0.39", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/express?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/fs-extra", + "extracted_requirement": "^4.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/fs-extra?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/glob", + "extracted_requirement": "^5.0.30", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/jest", + "extracted_requirement": "^21.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/jest?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/mock-fs", + "extracted_requirement": "^3.6.30", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/mock-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/node", + "extracted_requirement": "^8.0.47", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/node?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/node-sass", + "extracted_requirement": "^3.10.32", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/node-sass?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/rewire", + "extracted_requirement": "^2.5.27", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/rewire?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/webpack", + "extracted_requirement": "^3.0.14", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/webpack?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/%40types/ws", + "extracted_requirement": "^3.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/%40types/ws?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/conventional-changelog-cli", + "extracted_requirement": "^1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/conventional-changelog-cli?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/github", + "extracted_requirement": "0.2.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/github?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/ionic-cz-conventional-changelog", + "extracted_requirement": "^1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/ionic-cz-conventional-changelog?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/jest", + "extracted_requirement": "^21.2.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/jest?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/mock-fs", + "extracted_requirement": "^4.4.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/mock-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rewire", + "extracted_requirement": "^2.5.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rewire?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "^2.6.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rimraf?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/rxjs", + "extracted_requirement": "^5.5.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/rxjs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/sw-toolbox", + "extracted_requirement": "^3.6.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/sw-toolbox?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/tslint-ionic-rules", + "extracted_requirement": "^0.0.11", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/tslint-ionic-rules?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/typescript", + "extracted_requirement": "~2.3.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/typescript?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + }, + { + "purl": "pkg:npm/zone.js", + "extracted_requirement": "^0.8.17", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "dependency_uid": "pkg:npm/zone.js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" + } + ], + "packages": [ + { + "type": "maven", + "namespace": "aopalliance", + "name": "aopalliance", + "version": "1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Java", + "description": "AOP alliance\nAOP Alliance", + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "http://aopalliance.sourceforge.net", + "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, + "license_expression": "public-domain", + "declared_license": [ + { + "name": "Public Domain", + "url": null, + "comments": null, + "distribution": null + } + ], + "notice_text": null, + "source_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" + ], + "extra_data": {}, + "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "package_uid": "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + ], + "datasource_ids": [ + "maven_pom" + ], + "purl": "pkg:maven/aopalliance/aopalliance@1.0" + }, + { + "type": "freebsd", + "namespace": null, + "name": "dmidecode", + "version": "2.12", + "qualifiers": { + "arch": "freebsd:10:x86:64", + "origin": "sysutils/dmidecode" + }, + "subpath": null, + "primary_language": null, + "description": "Dmidecode is a tool or dumping a computer's DMI (some say SMBIOS) table\ncontents in a human-readable format. The output contains a description of the\nsystem's hardware components, as well as other useful pieces of information\nsuch as serial numbers and BIOS revision.\n\nWWW: http://www.nongnu.org/dmidecode/", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "maintainer", + "name": null, + "email": "anders@FreeBSD.org", + "url": null + } + ], + "keywords": [ + "sysutils" + ], + "homepage_url": "http://www.nongnu.org/dmidecode/", + "download_url": "https://pkg.freebsd.org/freebsd:10:x86:64/latest/All/dmidecode-2.12.txz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://svnweb.freebsd.org/ports/head/sysutils/dmidecode", + "vcs_url": null, + "copyright": null, + "license_expression": "gpl-2.0", + "declared_license": { + "licenses": [ + "GPLv2" + ], + "licenselogic": "single" + }, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/freebsd/basic/+COMPACT_MANIFEST" + ], + "datasource_ids": [ + "freebsd_compact_manifest" + ], + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" + }, + { + "type": "npm", + "namespace": "@ionic", + "name": "app-scripts", + "version": "3.0.1-201710301651", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "Scripts for Ionic Projects", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Ionic Team", + "email": "hi@ionic.io", + "url": "https://ionic.io" + } + ], + "keywords": [], + "homepage_url": "https://ionicframework.com/", + "download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/ionic-team/ionic-app-scripts/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/ionic-team/ionic-app-scripts.git", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", + "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", + "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts", + "package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/scoped1/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" + } + ], + "summary": {}, + "files": [ + { + "path": "scan", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/aopalliance", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/aopalliance/aopalliance", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/aopalliance/aopalliance/1.0", + "type": "directory", + "package_data": [], + "for_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "type": "file", + "package_data": [ + { + "type": "maven", + "namespace": "aopalliance", + "name": "aopalliance", + "version": "1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Java", + "description": "AOP alliance\nAOP Alliance", + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": "http://aopalliance.sourceforge.net", + "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, + "license_expression": null, + "declared_license": [ + { + "name": "Public Domain", + "url": null, + "comments": null, + "distribution": null + } + ], + "notice_text": null, + "source_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" + ], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aopalliance/aopalliance@1.0" + } + ], + "for_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/freebsd", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/freebsd/basic", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/freebsd/basic/+COMPACT_MANIFEST", + "type": "file", + "package_data": [ + { + "type": "freebsd", + "namespace": null, + "name": "dmidecode", + "version": "2.12", + "qualifiers": { + "arch": "freebsd:10:x86:64", + "origin": "sysutils/dmidecode" + }, + "subpath": null, + "primary_language": null, + "description": "Dmidecode is a tool or dumping a computer's DMI (some say SMBIOS) table\ncontents in a human-readable format. The output contains a description of the\nsystem's hardware components, as well as other useful pieces of information\nsuch as serial numbers and BIOS revision.\n\nWWW: http://www.nongnu.org/dmidecode/", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "maintainer", + "name": null, + "email": "anders@FreeBSD.org", + "url": null + } + ], + "keywords": [ + "sysutils" + ], + "homepage_url": "http://www.nongnu.org/dmidecode/", + "download_url": "https://pkg.freebsd.org/freebsd:10:x86:64/latest/All/dmidecode-2.12.txz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://svnweb.freebsd.org/ports/head/sysutils/dmidecode", + "vcs_url": null, + "copyright": null, + "license_expression": null, + "declared_license": { + "licenses": [ + "GPLv2" + ], + "licenselogic": "single" + }, + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" + } + ], + "for_packages": [ + "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + }, + { + "path": "scan/scoped1", + "type": "directory", + "package_data": [], + "for_packages": [], + "scan_errors": [] + }, + { + "path": "scan/scoped1/package.json", + "type": "file", + "package_data": [ + { + "type": "npm", + "namespace": "@ionic", + "name": "app-scripts", + "version": "3.0.1-201710301651", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": "Scripts for Ionic Projects", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Ionic Team", + "email": "hi@ionic.io", + "url": "https://ionic.io" + } + ], + "keywords": [], + "homepage_url": "https://ionicframework.com/", + "download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/ionic-team/ionic-app-scripts/issues", + "code_view_url": null, + "vcs_url": "git+https://github.com/ionic-team/ionic-app-scripts.git", + "copyright": null, + "license_expression": "mit", + "declared_license": [ + "MIT" + ], + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/%40angular-devkit/build-optimizer", + "extracted_requirement": "^0.0.31", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/autoprefixer", + "extracted_requirement": "^7.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chalk", + "extracted_requirement": "^2.3.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/chokidar", + "extracted_requirement": "^1.7.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/clean-css", + "extracted_requirement": "^4.1.9", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/cross-spawn", + "extracted_requirement": "^5.1.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/express", + "extracted_requirement": "^4.16.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/fs-extra", + "extracted_requirement": "^4.0.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/glob", + "extracted_requirement": "^7.1.2", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/json-loader", + "extracted_requirement": "^0.5.7", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/node-sass", + "extracted_requirement": "^4.5.3", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/os-name", + "extracted_requirement": "^2.0.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/postcss", + "extracted_requirement": "^6.0.13", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/proxy-middleware", + "extracted_requirement": "^0.15.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/reflect-metadata", + "extracted_requirement": "^0.1.10", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rollup", + "extracted_requirement": "0.50.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rollup-plugin-commonjs", + "extracted_requirement": "8.2.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rollup-plugin-node-resolve", + "extracted_requirement": "3.0.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/source-map", + "extracted_requirement": "^0.6.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tiny-lr", + "extracted_requirement": "^1.0.5", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tslint", + "extracted_requirement": "^5.8.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tslint-eslint-rules", + "extracted_requirement": "^4.1.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/uglify-es", + "extracted_requirement": "^3.1.6", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/webpack", + "extracted_requirement": "^3.8.1", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ws", + "extracted_requirement": "^3.2.0", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/xml2js", + "extracted_requirement": "^0.4.19", + "scope": "dependencies", + "is_runtime": true, + "is_optional": false, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/animations", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/common", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/compiler", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/compiler-cli", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/core", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/forms", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/http", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/platform-browser", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/platform-browser-dynamic", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/platform-server", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40angular/tsc-wrapped", + "extracted_requirement": "4.4.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/chokidar", + "extracted_requirement": "^1.7.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/clean-css", + "extracted_requirement": "^3.4.29", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/express", + "extracted_requirement": "^4.0.39", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/fs-extra", + "extracted_requirement": "^4.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/glob", + "extracted_requirement": "^5.0.30", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/jest", + "extracted_requirement": "^21.1.5", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/mock-fs", + "extracted_requirement": "^3.6.30", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/node", + "extracted_requirement": "^8.0.47", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/node-sass", + "extracted_requirement": "^3.10.32", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/rewire", + "extracted_requirement": "^2.5.27", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/webpack", + "extracted_requirement": "^3.0.14", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/%40types/ws", + "extracted_requirement": "^3.2.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/conventional-changelog-cli", + "extracted_requirement": "^1.3.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/github", + "extracted_requirement": "0.2.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/ionic-cz-conventional-changelog", + "extracted_requirement": "^1.0.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/jest", + "extracted_requirement": "^21.2.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/mock-fs", + "extracted_requirement": "^4.4.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rewire", + "extracted_requirement": "^2.5.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rimraf", + "extracted_requirement": "^2.6.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/rxjs", + "extracted_requirement": "^5.5.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/sw-toolbox", + "extracted_requirement": "^3.6.0", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/tslint-ionic-rules", + "extracted_requirement": "^0.0.11", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/typescript", + "extracted_requirement": "~2.3.4", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + }, + { + "purl": "pkg:npm/zone.js", + "extracted_requirement": "^0.8.17", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {} + } + ], + "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", + "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", + "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" + } + ], + "for_packages": [ + "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/summarycode/data/plugin_consolidate/component-package-build-expected.json b/tests/summarycode/data/plugin_consolidate/component-package-build-expected.json index dfe25ab5b08..c1526515001 100644 --- a/tests/summarycode/data/plugin_consolidate/component-package-build-expected.json +++ b/tests/summarycode/data/plugin_consolidate/component-package-build-expected.json @@ -26,6 +26,46 @@ ], "dependencies": [], "packages": [ + { + "type": "buck", + "namespace": null, + "name": "demo", + "version": null, + "qualifiers": {}, + "subpath": null, + "primary_language": null, + "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, + "license_expression": null, + "declared_license": null, + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:buck/demo?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "component-package-build/build/BUCK" + ], + "datasource_ids": [ + "buck_file" + ], + "purl": "pkg:buck/demo" + }, { "type": "npm", "namespace": null, @@ -54,22 +94,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/test-package@0.0.1", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/test-package", + "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "package_uid": "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "component-package-build/package/package.json" ], - "files": [ - "component-package-build/package/package.json", - "component-package-build/package/src1", - "component-package-build/package/src2" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "purl": "pkg:npm/test-package@0.0.1" } ], "consolidated_components": [ @@ -255,20 +292,23 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "unknown", + "license_expression": null, "declared_license": null, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:buck/demo", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "buck_file", + "purl": "pkg:buck/demo" } ], - "for_packages": [], + "for_packages": [ + "pkg:buck/demo?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "consolidated_to": [], "files_count": 0, "dirs_count": 0, @@ -806,18 +846,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test-package@0.0.1" } ], "for_packages": [ - "pkg:npm/test-package@0.0.1" + "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "consolidated_to": [ "apache_software_1" @@ -906,9 +947,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [], "files_count": 0, "dirs_count": 0, @@ -994,9 +1033,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "corp_ibm_1" ], diff --git a/tests/summarycode/data/plugin_consolidate/component-package-expected.json b/tests/summarycode/data/plugin_consolidate/component-package-expected.json index 3c1e797c200..7916a84e908 100644 --- a/tests/summarycode/data/plugin_consolidate/component-package-expected.json +++ b/tests/summarycode/data/plugin_consolidate/component-package-expected.json @@ -20,26 +20,6 @@ "files_count": 7 } }, - { - "tool_name": "scancode-toolkit", - "options": { - "input": "", - "--consolidate": true, - "--from-json": true, - "--json": "" - }, - "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "output_format_version": "2.0.0", - "message": null, - "errors": [], - "warnings": [ - "The --consolidate option will be deprecated in a future version of scancode-toolkit." - ], - "extra_data": { - "spdx_license_list_version": "3.16", - "files_count": 7 - } - }, { "tool_name": "scancode-toolkit", "options": { @@ -91,22 +71,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/test-package@0.0.1", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/test-package", + "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "package_uid": "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "component-package/package/package.json" ], - "files": [ - "component-package/package/package.json", - "component-package/package/src1", - "component-package/package/src2" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "purl": "pkg:npm/test-package@0.0.1" } ], "consolidated_components": [ @@ -741,18 +718,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test-package@0.0.1" } ], "for_packages": [ - "pkg:npm/test-package@0.0.1" + "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "consolidated_to": [ "apache_software_1" @@ -841,9 +819,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [], "files_count": 0, "dirs_count": 0, @@ -929,9 +905,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "corp_ibm_1" ], diff --git a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/bar/package.json b/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/bar/package.json deleted file mode 100644 index fe3c3f1786a..00000000000 --- a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/bar/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bar", - "version": "0.0.1", - "license": "apache-2.0" -} diff --git a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/node_modules/bar/package.json b/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/node_modules/bar/package.json deleted file mode 100644 index fe3c3f1786a..00000000000 --- a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/node_modules/bar/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bar", - "version": "0.0.1", - "license": "apache-2.0" -} diff --git a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/package.json b/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/package.json deleted file mode 100644 index 586ac3ff363..00000000000 --- a/tests/summarycode/data/plugin_consolidate/nested-packages/node_modules/foo/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "foo", - "version": "0.0.1", - "license": "apache-2.0" -} diff --git a/tests/summarycode/data/plugin_consolidate/nested-packages/package.json b/tests/summarycode/data/plugin_consolidate/nested-packages/package.json deleted file mode 100644 index 5e8b1f74179..00000000000 --- a/tests/summarycode/data/plugin_consolidate/nested-packages/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "test-package", - "version": "0.0.1", - "license": "apache-2.0" -} diff --git a/tests/summarycode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json b/tests/summarycode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json index addc77dbc9e..1339e4fa47d 100644 --- a/tests/summarycode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json +++ b/tests/summarycode/data/plugin_consolidate/package-files-not-counted-in-license-holders-expected.json @@ -54,23 +54,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/test-package@0.0.1", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/test-package", + "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "package_uid": "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "package-files-not-counted-in-license-holders/package/package.json" ], - "files": [ - "package-files-not-counted-in-license-holders/package/package.json", - "package-files-not-counted-in-license-holders/package/src1", - "package-files-not-counted-in-license-holders/package/src2", - "package-files-not-counted-in-license-holders/package/src3" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "purl": "pkg:npm/test-package@0.0.1" } ], "consolidated_components": [ @@ -286,18 +282,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test-package@0.0.1" } ], "for_packages": [ - "pkg:npm/test-package@0.0.1" + "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "consolidated_to": [ "apache_software_1" @@ -386,9 +383,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], @@ -476,9 +471,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], @@ -566,9 +559,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], diff --git a/tests/summarycode/data/plugin_consolidate/package-fileset-expected.json b/tests/summarycode/data/plugin_consolidate/package-fileset-expected.json index 310dbafb243..bcf531bb9aa 100644 --- a/tests/summarycode/data/plugin_consolidate/package-fileset-expected.json +++ b/tests/summarycode/data/plugin_consolidate/package-fileset-expected.json @@ -54,23 +54,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/test-package@0.0.1", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/test-package", + "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "package_uid": "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "package/package.json" ], - "files": [ - "package/package.json", - "package/src1", - "package/src2", - "package/src3" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "purl": "pkg:npm/test-package@0.0.1" } ], "consolidated_components": [ @@ -223,18 +219,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test-package@0.0.1" } ], "for_packages": [ - "pkg:npm/test-package@0.0.1" + "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "consolidated_to": [], "files_count": 0, @@ -321,9 +318,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], @@ -411,9 +406,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], @@ -501,9 +494,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/test-package@0.0.1" - ], + "for_packages": [], "consolidated_to": [ "apache_foundation_software_1" ], diff --git a/tests/summarycode/data/plugin_consolidate/package-manifest-expected.json b/tests/summarycode/data/plugin_consolidate/package-manifest-expected.json index 3fbeddd4b0b..acd3a6cf269 100644 --- a/tests/summarycode/data/plugin_consolidate/package-manifest-expected.json +++ b/tests/summarycode/data/plugin_consolidate/package-manifest-expected.json @@ -54,20 +54,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/test-package@0.0.1", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/test-package", + "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "package_uid": "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "package-manifest/package.json" ], - "files": [ - "package-manifest/package.json" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/test-package@0.0.1", - "repository_homepage_url": "https://www.npmjs.com/package/test-package", - "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "purl": "pkg:npm/test-package@0.0.1" } ], "consolidated_components": [], @@ -201,18 +200,19 @@ "apache-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:npm/test-package@0.0.1", "repository_homepage_url": "https://www.npmjs.com/package/test-package", "repository_download_url": "https://registry.npmjs.org/test-package/-/test-package-0.0.1.tgz", - "api_data_url": "https://registry.npmjs.org/test-package/0.0.1" + "api_data_url": "https://registry.npmjs.org/test-package/0.0.1", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test-package@0.0.1" } ], "for_packages": [ - "pkg:npm/test-package@0.0.1" + "pkg:npm/test-package@0.0.1?uuid=fixed-uid-done-for-testing-5642512d1758" ], "consolidated_to": [], "files_count": 0, diff --git a/tests/summarycode/data/plugin_consolidate/zlib-expected.json b/tests/summarycode/data/plugin_consolidate/zlib-expected.json index 00d9661d79b..2b569422a79 100644 --- a/tests/summarycode/data/plugin_consolidate/zlib-expected.json +++ b/tests/summarycode/data/plugin_consolidate/zlib-expected.json @@ -7407,9 +7407,7 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "zlib-1.2.11/contrib/minizip", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:autotools/minizip", "repository_homepage_url": null, diff --git a/tests/summarycode/data/plugin_consolidate/zlib.json b/tests/summarycode/data/plugin_consolidate/zlib.json index 70326760626..3ee5ceffc45 100644 --- a/tests/summarycode/data/plugin_consolidate/zlib.json +++ b/tests/summarycode/data/plugin_consolidate/zlib.json @@ -9246,9 +9246,7 @@ "license_expression": null, "declared_license": null, "notice_text": null, - "root_path": "zlib-1.2.11/contrib/minizip", "dependencies": [], - "contains_source_code": null, "source_packages": [], "purl": "pkg:autotools/minizip", "repository_homepage_url": null, diff --git a/tests/summarycode/data/summary/multiple_package_data/multiple_package_data.expected.json b/tests/summarycode/data/summary/multiple_package_data/multiple_package_data.expected.json index 5ef81eca892..c2ab5cc8638 100644 --- a/tests/summarycode/data/summary/multiple_package_data/multiple_package_data.expected.json +++ b/tests/summarycode/data/summary/multiple_package_data/multiple_package_data.expected.json @@ -59,24 +59,19 @@ "license_expression": "mit", "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:cargo/codebase", - "package_data_files": [ + "repository_homepage_url": "https://crates.io/crates/codebase", + "repository_download_url": null, + "api_data_url": "https://crates.io/api/v1/crates/codebase", + "package_uid": "pkg:cargo/codebase?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "codebase/cargo.toml" ], - "files": [ - "codebase/apache-2.0.LICENSE", - "codebase/cargo.toml", - "codebase/mit.LICENSE", - "codebase/README.txt", - "codebase/setup.py" + "datasource_ids": [ + "cargo_toml" ], - "purl": "pkg:cargo/codebase", - "repository_homepage_url": "https://crates.io/crates/codebase", - "repository_download_url": null, - "api_data_url": "https://crates.io/api/v1/crates/codebase" + "purl": "pkg:cargo/codebase" }, { "type": "pypi", @@ -114,24 +109,19 @@ "license": "apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/codebase", - "package_data_files": [ + "repository_homepage_url": "https://pypi.org/project/codebase", + "repository_download_url": null, + "api_data_url": "https://pypi.org/pypi/codebase/json", + "package_uid": "pkg:pypi/codebase?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "codebase/setup.py" ], - "files": [ - "codebase/apache-2.0.LICENSE", - "codebase/cargo.toml", - "codebase/mit.LICENSE", - "codebase/README.txt", - "codebase/setup.py" + "datasource_ids": [ + "pypi_setup_py" ], - "purl": "pkg:pypi/codebase", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/codebase/json" + "purl": "pkg:pypi/codebase" } ], "summary": { @@ -365,10 +355,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:cargo/codebase", - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": false, "is_manifest": false, "is_readme": true, @@ -446,10 +433,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:cargo/codebase", - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": true, "is_manifest": false, "is_readme": false, @@ -541,7 +525,7 @@ "qualifiers": {}, "subpath": null, "primary_language": "Rust", - "description": null, + "description": "", "release_date": null, "parties": [ { @@ -564,22 +548,22 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "mit", + "license_expression": null, "declared_license": "MIT", "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:cargo/codebase", "repository_homepage_url": "https://crates.io/crates/codebase", "repository_download_url": null, - "api_data_url": "https://crates.io/api/v1/crates/codebase" + "api_data_url": "https://crates.io/api/v1/crates/codebase", + "datasource_id": "cargo_toml", + "purl": "pkg:cargo/codebase" } ], "for_packages": [ - "pkg:cargo/codebase", - "pkg:pypi/codebase" + "pkg:cargo/codebase?uuid=fixed-uid-done-for-testing-5642512d1758" ], "is_legal": false, "is_manifest": true, @@ -658,10 +642,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:cargo/codebase", - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": true, "is_manifest": false, "is_readme": false, @@ -770,24 +751,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "apache-2.0", + "license_expression": null, "declared_license": { "license": "apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/codebase", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/codebase", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/codebase/json" + "api_data_url": "https://pypi.org/pypi/codebase/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/codebase" } ], "for_packages": [ - "pkg:cargo/codebase", - "pkg:pypi/codebase" + "pkg:pypi/codebase?uuid=fixed-uid-done-for-testing-5642512d1758" ], "is_legal": false, "is_manifest": true, diff --git a/tests/summarycode/data/summary/with_package_data/with_package_data.expected.json b/tests/summarycode/data/summary/with_package_data/with_package_data.expected.json index dad5752d513..233011cc881 100644 --- a/tests/summarycode/data/summary/with_package_data/with_package_data.expected.json +++ b/tests/summarycode/data/summary/with_package_data/with_package_data.expected.json @@ -61,23 +61,19 @@ "license": "apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:pypi/codebase", - "package_data_files": [ + "repository_homepage_url": "https://pypi.org/project/codebase", + "repository_download_url": null, + "api_data_url": "https://pypi.org/pypi/codebase/json", + "package_uid": "pkg:pypi/codebase?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "codebase/setup.py" ], - "files": [ - "codebase/apache-2.0.LICENSE", - "codebase/mit.LICENSE", - "codebase/README.txt", - "codebase/setup.py" + "datasource_ids": [ + "pypi_setup_py" ], - "purl": "pkg:pypi/codebase", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", - "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/codebase/json" + "purl": "pkg:pypi/codebase" } ], "summary": { @@ -307,9 +303,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": false, "is_manifest": false, "is_readme": true, @@ -387,9 +381,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": true, "is_manifest": false, "is_readme": false, @@ -467,9 +459,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:pypi/codebase" - ], + "for_packages": [], "is_legal": true, "is_manifest": false, "is_readme": false, @@ -578,23 +568,24 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "apache-2.0", + "license_expression": null, "declared_license": { "license": "apache-2.0" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:pypi/codebase", - "repository_homepage_url": "https://pypi.org/project/https://pypi.org", + "repository_homepage_url": "https://pypi.org/project/codebase", "repository_download_url": null, - "api_data_url": "https://pypi.org/pypi/codebase/json" + "api_data_url": "https://pypi.org/pypi/codebase/json", + "datasource_id": "pypi_setup_py", + "purl": "pkg:pypi/codebase" } ], "for_packages": [ - "pkg:pypi/codebase" + "pkg:pypi/codebase?uuid=fixed-uid-done-for-testing-5642512d1758" ], "is_legal": false, "is_manifest": true, diff --git a/tests/summarycode/data/tallies/full_tallies/tallies.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies.expected.json index 127e8e7684c..6f610012c83 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies.expected.json @@ -31,9 +31,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/abbrev", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/abbrev?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansi", @@ -43,9 +44,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansi", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansi?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansicolors", @@ -55,9 +57,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansicolors", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansicolors?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansistyles", @@ -67,9 +70,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansistyles", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansistyles?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/archy", @@ -79,9 +83,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/archy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/archy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/async-some", @@ -91,9 +96,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/async-some", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/async-some?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/block-stream", @@ -103,9 +109,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/block-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/block-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/char-spinner", @@ -115,9 +122,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/char-spinner", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/char-spinner?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chmodr", @@ -127,9 +135,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chmodr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chmodr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chownr", @@ -139,9 +148,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chownr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chownr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/cmd-shim", @@ -151,9 +161,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/cmd-shim", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/cmd-shim?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/columnify", @@ -163,9 +174,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/columnify", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/columnify?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/config-chain", @@ -175,9 +187,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/config-chain", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/config-chain?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/dezalgo", @@ -187,9 +200,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/dezalgo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/dezalgo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/editor", @@ -199,9 +213,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/editor", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/editor?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-vacuum", @@ -211,9 +226,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-vacuum", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-vacuum?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-write-stream-atomic", @@ -223,9 +239,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-write-stream-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-write-stream-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream", @@ -235,9 +252,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream-npm", @@ -247,9 +265,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream-npm", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream-npm?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-git", @@ -259,9 +278,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-git", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-git?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-username-repo", @@ -271,9 +291,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-username-repo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-username-repo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/glob", @@ -283,9 +304,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/glob", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/graceful-fs", @@ -295,9 +317,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/graceful-fs", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/graceful-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/hosted-git-info", @@ -307,9 +330,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/hosted-git-info", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/hosted-git-info?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inflight", @@ -319,9 +343,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inflight", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inflight?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inherits", @@ -331,9 +356,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inherits", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inherits?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ini", @@ -343,9 +369,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ini", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ini?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/init-package-json", @@ -355,9 +382,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/init-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/init-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lockfile", @@ -367,9 +395,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lockfile", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lockfile?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lru-cache", @@ -379,9 +408,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lru-cache", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lru-cache?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/minimatch", @@ -391,9 +421,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/minimatch", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/minimatch?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/mkdirp", @@ -403,9 +434,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/mkdirp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/mkdirp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/node-gyp", @@ -415,9 +447,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/node-gyp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/node-gyp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nopt", @@ -427,9 +460,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nopt", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nopt?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-git-url", @@ -439,9 +473,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-git-url", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-git-url?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-package-data", @@ -451,9 +486,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-package-data", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-package-data?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-cache-filename", @@ -463,9 +499,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-cache-filename", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-cache-filename?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-install-checks", @@ -475,9 +512,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-install-checks", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-install-checks?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-package-arg", @@ -487,9 +525,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-package-arg", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-package-arg?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-client", @@ -499,9 +538,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-client", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-client?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-user-validate", @@ -511,9 +551,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-user-validate", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-user-validate?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npmlog", @@ -523,9 +564,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npmlog", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npmlog?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/once", @@ -535,9 +577,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/once", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/once?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/opener", @@ -547,9 +590,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/opener", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/opener?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/osenv", @@ -559,9 +603,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/osenv", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/osenv?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/path-is-inside", @@ -571,9 +616,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/path-is-inside", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/path-is-inside?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read", @@ -583,9 +629,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-installed", @@ -595,9 +642,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-installed", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-installed?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-package-json", @@ -607,9 +655,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/readable-stream", @@ -619,9 +668,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/readable-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/readable-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/realize-package-specifier", @@ -631,9 +681,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/realize-package-specifier", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/realize-package-specifier?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/request", @@ -643,9 +694,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/request", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/request?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/retry", @@ -655,9 +707,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/retry", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/retry?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rimraf", @@ -667,9 +720,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rimraf", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/rimraf?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/semver", @@ -679,9 +733,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/semver", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/semver?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sha", @@ -691,9 +746,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sha", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sha?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/slide", @@ -703,9 +759,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/slide", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/slide?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sorted-object", @@ -715,9 +772,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sorted-object", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sorted-object?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/spdx", @@ -727,9 +785,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/spdx", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/spdx?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tar", @@ -739,9 +798,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tar", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/text-table", @@ -751,9 +811,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/text-table", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/text-table?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/uid-number", @@ -763,9 +824,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/uid-number", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/uid-number?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/umask", @@ -775,9 +837,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/umask", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/umask?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-name", @@ -787,9 +850,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-name", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-name?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/which", @@ -799,9 +863,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/which", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/which?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/wrappy", @@ -811,9 +876,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/wrappy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/wrappy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/write-file-atomic", @@ -823,9 +889,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/write-file-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/write-file-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-license", @@ -835,9 +902,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-license", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-license?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/deep-equal", @@ -847,9 +915,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/deep-equal", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/deep-equal?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked", @@ -859,9 +928,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked-man", @@ -871,9 +941,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked-man", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked-man?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nock", @@ -883,9 +954,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-couchapp", @@ -895,9 +967,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-couchapp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-couchapp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-mock", @@ -907,9 +980,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-mock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-mock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/require-inject", @@ -919,9 +993,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/require-inject", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/require-inject?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sprintf-js", @@ -931,9 +1006,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sprintf-js", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sprintf-js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tap", @@ -943,9 +1019,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tap", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tap?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -3160,45 +3237,19 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/npm@2.13.5", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/package.json" ], - "files": [ - "scan/cc0-1.0.LICENSE", - "scan/package.json", - "scan/README", - "scan/arch/adler32.c", - "scan/arch/zlib.h", - "scan/arch/zutil.h", - "scan/JGroups/src/FixedMembershipToken.java", - "scan/JGroups/src/GuardedBy.java", - "scan/JGroups/src/ImmutableReference.java", - "scan/JGroups/src/RATE_LIMITER.java", - "scan/JGroups/src/RouterStub.java", - "scan/JGroups/src/RouterStubManager.java", - "scan/JGroups/src/S3_PING.java", - "scan/zlib/adler32.c", - "scan/zlib/deflate.c", - "scan/zlib/deflate.h", - "scan/zlib/zlib.h", - "scan/zlib/zutil.c", - "scan/zlib/zutil.h", - "scan/zlib/ada/zlib.ads", - "scan/zlib/dotzlib/AssemblyInfo.cs", - "scan/zlib/dotzlib/ChecksumImpl.cs", - "scan/zlib/gcc_gvmat64/gvmat64.S", - "scan/zlib/infback9/infback9.c", - "scan/zlib/infback9/infback9.h", - "scan/zlib/iostream2/zstream.h" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/npm@2.13.5", - "repository_homepage_url": "https://www.npmjs.com/package/npm", - "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "purl": "pkg:npm/npm@2.13.5" } ], "tallies": { @@ -3553,9 +3604,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3646,9 +3695,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3733,9 +3780,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3773,9 +3818,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3813,9 +3856,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3900,9 +3941,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3940,9 +3979,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -3974,9 +4011,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -4095,9 +4130,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -4182,9 +4215,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -4271,9 +4302,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -4346,9 +4375,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -6638,8 +6665,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7336,14 +7363,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ], "for_packages": [ - "pkg:npm/npm@2.13.5" + "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758" ], "files_count": 0, "dirs_count": 0, @@ -7533,9 +7561,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -7622,9 +7648,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -7711,9 +7735,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -7800,9 +7822,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -7878,9 +7898,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -7967,9 +7985,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8092,9 +8108,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8213,9 +8227,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8302,9 +8314,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8421,9 +8431,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8508,9 +8516,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8597,9 +8603,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -8686,9 +8690,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json index ead32eb0e8e..ff0cb5807c7 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json @@ -42,9 +42,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/abbrev", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/abbrev?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansi", @@ -54,9 +55,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansi", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansi?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansicolors", @@ -66,9 +68,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansicolors", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansicolors?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansistyles", @@ -78,9 +81,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansistyles", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansistyles?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/archy", @@ -90,9 +94,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/archy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/archy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/async-some", @@ -102,9 +107,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/async-some", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/async-some?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/block-stream", @@ -114,9 +120,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/block-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/block-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/char-spinner", @@ -126,9 +133,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/char-spinner", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/char-spinner?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chmodr", @@ -138,9 +146,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chmodr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chmodr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chownr", @@ -150,9 +159,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chownr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chownr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/cmd-shim", @@ -162,9 +172,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/cmd-shim", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/cmd-shim?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/columnify", @@ -174,9 +185,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/columnify", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/columnify?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/config-chain", @@ -186,9 +198,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/config-chain", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/config-chain?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/dezalgo", @@ -198,9 +211,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/dezalgo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/dezalgo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/editor", @@ -210,9 +224,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/editor", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/editor?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-vacuum", @@ -222,9 +237,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-vacuum", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-vacuum?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-write-stream-atomic", @@ -234,9 +250,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-write-stream-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-write-stream-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream", @@ -246,9 +263,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream-npm", @@ -258,9 +276,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream-npm", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream-npm?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-git", @@ -270,9 +289,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-git", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-git?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-username-repo", @@ -282,9 +302,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-username-repo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-username-repo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/glob", @@ -294,9 +315,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/glob", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/graceful-fs", @@ -306,9 +328,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/graceful-fs", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/graceful-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/hosted-git-info", @@ -318,9 +341,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/hosted-git-info", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/hosted-git-info?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inflight", @@ -330,9 +354,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inflight", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inflight?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inherits", @@ -342,9 +367,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inherits", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inherits?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ini", @@ -354,9 +380,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ini", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ini?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/init-package-json", @@ -366,9 +393,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/init-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/init-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lockfile", @@ -378,9 +406,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lockfile", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lockfile?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lru-cache", @@ -390,9 +419,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lru-cache", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lru-cache?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/minimatch", @@ -402,9 +432,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/minimatch", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/minimatch?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/mkdirp", @@ -414,9 +445,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/mkdirp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/mkdirp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/node-gyp", @@ -426,9 +458,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/node-gyp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/node-gyp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nopt", @@ -438,9 +471,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nopt", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nopt?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-git-url", @@ -450,9 +484,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-git-url", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-git-url?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-package-data", @@ -462,9 +497,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-package-data", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-package-data?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-cache-filename", @@ -474,9 +510,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-cache-filename", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-cache-filename?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-install-checks", @@ -486,9 +523,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-install-checks", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-install-checks?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-package-arg", @@ -498,9 +536,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-package-arg", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-package-arg?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-client", @@ -510,9 +549,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-client", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-client?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-user-validate", @@ -522,9 +562,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-user-validate", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-user-validate?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npmlog", @@ -534,9 +575,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npmlog", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npmlog?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/once", @@ -546,9 +588,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/once", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/once?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/opener", @@ -558,9 +601,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/opener", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/opener?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/osenv", @@ -570,9 +614,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/osenv", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/osenv?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/path-is-inside", @@ -582,9 +627,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/path-is-inside", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/path-is-inside?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read", @@ -594,9 +640,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-installed", @@ -606,9 +653,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-installed", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-installed?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-package-json", @@ -618,9 +666,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/readable-stream", @@ -630,9 +679,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/readable-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/readable-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/realize-package-specifier", @@ -642,9 +692,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/realize-package-specifier", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/realize-package-specifier?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/request", @@ -654,9 +705,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/request", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/request?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/retry", @@ -666,9 +718,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/retry", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/retry?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rimraf", @@ -678,9 +731,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rimraf", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/rimraf?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/semver", @@ -690,9 +744,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/semver", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/semver?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sha", @@ -702,9 +757,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sha", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sha?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/slide", @@ -714,9 +770,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/slide", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/slide?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sorted-object", @@ -726,9 +783,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sorted-object", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sorted-object?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/spdx", @@ -738,9 +796,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/spdx", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/spdx?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tar", @@ -750,9 +809,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tar", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/text-table", @@ -762,9 +822,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/text-table", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/text-table?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/uid-number", @@ -774,9 +835,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/uid-number", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/uid-number?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/umask", @@ -786,9 +848,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/umask", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/umask?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-name", @@ -798,9 +861,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-name", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-name?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/which", @@ -810,9 +874,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/which", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/which?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/wrappy", @@ -822,9 +887,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/wrappy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/wrappy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/write-file-atomic", @@ -834,9 +900,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/write-file-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/write-file-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-license", @@ -846,9 +913,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-license", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-license?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/deep-equal", @@ -858,9 +926,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/deep-equal", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/deep-equal?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked", @@ -870,9 +939,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked-man", @@ -882,9 +952,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked-man", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked-man?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nock", @@ -894,9 +965,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-couchapp", @@ -906,9 +978,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-couchapp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-couchapp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-mock", @@ -918,9 +991,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-mock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-mock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/require-inject", @@ -930,9 +1004,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/require-inject", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/require-inject?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sprintf-js", @@ -942,9 +1017,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sprintf-js", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sprintf-js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tap", @@ -954,9 +1030,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tap", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tap?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -3171,45 +3248,19 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/npm@2.13.5", - "package_data_files": [ - "scan/package.json" - ], - "files": [ - "scan/cc0-1.0.LICENSE", - "scan/package.json", - "scan/README", - "scan/arch/adler32.c", - "scan/arch/zlib.h", - "scan/arch/zutil.h", - "scan/JGroups/src/FixedMembershipToken.java", - "scan/JGroups/src/GuardedBy.java", - "scan/JGroups/src/ImmutableReference.java", - "scan/JGroups/src/RATE_LIMITER.java", - "scan/JGroups/src/RouterStub.java", - "scan/JGroups/src/RouterStubManager.java", - "scan/JGroups/src/S3_PING.java", - "scan/zlib/adler32.c", - "scan/zlib/deflate.c", - "scan/zlib/deflate.h", - "scan/zlib/zlib.h", - "scan/zlib/zutil.c", - "scan/zlib/zutil.h", - "scan/zlib/ada/zlib.ads", - "scan/zlib/dotzlib/AssemblyInfo.cs", - "scan/zlib/dotzlib/ChecksumImpl.cs", - "scan/zlib/gcc_gvmat64/gvmat64.S", - "scan/zlib/infback9/infback9.c", - "scan/zlib/infback9/infback9.h", - "scan/zlib/iostream2/zstream.h" - ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ + "scan/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/npm@2.13.5" } ], "tallies": { @@ -3826,9 +3877,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -3930,9 +3979,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -4033,9 +4080,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -4084,9 +4129,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -4129,9 +4172,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -4221,9 +4262,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -4272,9 +4311,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -4311,9 +4348,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -4451,9 +4486,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -4543,9 +4576,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [ { "email": "jloup@gzip.org", @@ -4654,9 +4685,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -4734,9 +4763,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -7031,8 +7058,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -7729,14 +7756,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ], "for_packages": [ - "pkg:npm/npm@2.13.5" + "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758" ], "emails": [ { @@ -8219,9 +8247,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -8313,9 +8339,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -8407,9 +8431,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -8501,9 +8523,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -8587,9 +8607,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -8681,9 +8699,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -8820,9 +8836,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -8965,9 +8979,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -9059,9 +9071,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -9186,9 +9196,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [ { @@ -9284,9 +9292,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [ { "email": "jloup@gzip.org", @@ -9389,9 +9395,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ @@ -9483,9 +9487,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "emails": [], "urls": [], "facets": [ diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json index f491069f71c..e196367b074 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json @@ -31,9 +31,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/abbrev", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/abbrev?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansi", @@ -43,9 +44,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansi", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansi?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansicolors", @@ -55,9 +57,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansicolors", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansicolors?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ansistyles", @@ -67,9 +70,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ansistyles", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ansistyles?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/archy", @@ -79,9 +83,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/archy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/archy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/async-some", @@ -91,9 +96,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/async-some", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/async-some?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/block-stream", @@ -103,9 +109,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/block-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/block-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/char-spinner", @@ -115,9 +122,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/char-spinner", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/char-spinner?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chmodr", @@ -127,9 +135,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chmodr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chmodr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chownr", @@ -139,9 +148,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chownr", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/chownr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/cmd-shim", @@ -151,9 +161,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/cmd-shim", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/cmd-shim?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/columnify", @@ -163,9 +174,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/columnify", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/columnify?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/config-chain", @@ -175,9 +187,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/config-chain", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/config-chain?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/dezalgo", @@ -187,9 +200,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/dezalgo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/dezalgo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/editor", @@ -199,9 +213,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/editor", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/editor?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-vacuum", @@ -211,9 +226,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-vacuum", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-vacuum?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-write-stream-atomic", @@ -223,9 +239,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-write-stream-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fs-write-stream-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream", @@ -235,9 +252,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fstream-npm", @@ -247,9 +265,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fstream-npm", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/fstream-npm?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-git", @@ -259,9 +278,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-git", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-git?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github-url-from-username-repo", @@ -271,9 +291,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github-url-from-username-repo", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/github-url-from-username-repo?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/glob", @@ -283,9 +304,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/glob", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/graceful-fs", @@ -295,9 +317,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/graceful-fs", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/graceful-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/hosted-git-info", @@ -307,9 +330,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/hosted-git-info", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/hosted-git-info?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inflight", @@ -319,9 +343,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inflight", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inflight?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/inherits", @@ -331,9 +356,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/inherits", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/inherits?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ini", @@ -343,9 +369,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ini", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/ini?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/init-package-json", @@ -355,9 +382,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/init-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/init-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lockfile", @@ -367,9 +395,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lockfile", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lockfile?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/lru-cache", @@ -379,9 +408,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/lru-cache", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/lru-cache?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/minimatch", @@ -391,9 +421,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/minimatch", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/minimatch?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/mkdirp", @@ -403,9 +434,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/mkdirp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/mkdirp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/node-gyp", @@ -415,9 +447,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/node-gyp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/node-gyp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nopt", @@ -427,9 +460,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nopt", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nopt?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-git-url", @@ -439,9 +473,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-git-url", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-git-url?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/normalize-package-data", @@ -451,9 +486,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/normalize-package-data", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/normalize-package-data?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-cache-filename", @@ -463,9 +499,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-cache-filename", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-cache-filename?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-install-checks", @@ -475,9 +512,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-install-checks", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-install-checks?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-package-arg", @@ -487,9 +525,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-package-arg", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-package-arg?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-client", @@ -499,9 +538,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-client", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-client?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-user-validate", @@ -511,9 +551,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-user-validate", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-user-validate?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npmlog", @@ -523,9 +564,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npmlog", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npmlog?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/once", @@ -535,9 +577,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/once", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/once?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/opener", @@ -547,9 +590,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/opener", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/opener?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/osenv", @@ -559,9 +603,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/osenv", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/osenv?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/path-is-inside", @@ -571,9 +616,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/path-is-inside", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/path-is-inside?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read", @@ -583,9 +629,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-installed", @@ -595,9 +642,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-installed", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-installed?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/read-package-json", @@ -607,9 +655,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/read-package-json", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/read-package-json?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/readable-stream", @@ -619,9 +668,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/readable-stream", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/readable-stream?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/realize-package-specifier", @@ -631,9 +681,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/realize-package-specifier", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/realize-package-specifier?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/request", @@ -643,9 +694,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/request", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/request?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/retry", @@ -655,9 +707,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/retry", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/retry?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rimraf", @@ -667,9 +720,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rimraf", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/rimraf?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/semver", @@ -679,9 +733,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/semver", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/semver?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sha", @@ -691,9 +746,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sha", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sha?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/slide", @@ -703,9 +759,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/slide", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/slide?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sorted-object", @@ -715,9 +772,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sorted-object", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sorted-object?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/spdx", @@ -727,9 +785,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/spdx", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/spdx?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tar", @@ -739,9 +798,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tar", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/text-table", @@ -751,9 +811,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/text-table", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/text-table?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/uid-number", @@ -763,9 +824,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/uid-number", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/uid-number?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/umask", @@ -775,9 +837,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/umask", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/umask?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-name", @@ -787,9 +850,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-name", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-name?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/which", @@ -799,9 +863,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/which", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/which?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/wrappy", @@ -811,9 +876,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/wrappy", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/wrappy?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/write-file-atomic", @@ -823,9 +889,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/write-file-atomic", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/write-file-atomic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/validate-npm-package-license", @@ -835,9 +902,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/validate-npm-package-license", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/validate-npm-package-license?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/deep-equal", @@ -847,9 +915,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/deep-equal", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/deep-equal?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked", @@ -859,9 +928,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/marked-man", @@ -871,9 +941,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/marked-man", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/marked-man?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/nock", @@ -883,9 +954,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/nock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/nock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-couchapp", @@ -895,9 +967,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-couchapp", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-couchapp?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/npm-registry-mock", @@ -907,9 +980,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/npm-registry-mock", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/npm-registry-mock?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/require-inject", @@ -919,9 +993,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/require-inject", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/require-inject?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sprintf-js", @@ -931,9 +1006,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sprintf-js", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/sprintf-js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tap", @@ -943,9 +1019,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tap", - "for_package": "pkg:npm/npm@2.13.5", - "lockfile": "scan/package.json" + "dependency_uid": "pkg:npm/tap?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -3160,45 +3237,19 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/npm@2.13.5", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/npm", + "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "package_uid": "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/package.json" ], - "files": [ - "scan/cc0-1.0.LICENSE", - "scan/package.json", - "scan/README", - "scan/arch/adler32.c", - "scan/arch/zlib.h", - "scan/arch/zutil.h", - "scan/JGroups/src/FixedMembershipToken.java", - "scan/JGroups/src/GuardedBy.java", - "scan/JGroups/src/ImmutableReference.java", - "scan/JGroups/src/RATE_LIMITER.java", - "scan/JGroups/src/RouterStub.java", - "scan/JGroups/src/RouterStubManager.java", - "scan/JGroups/src/S3_PING.java", - "scan/zlib/adler32.c", - "scan/zlib/deflate.c", - "scan/zlib/deflate.h", - "scan/zlib/zlib.h", - "scan/zlib/zutil.c", - "scan/zlib/zutil.h", - "scan/zlib/ada/zlib.ads", - "scan/zlib/dotzlib/AssemblyInfo.cs", - "scan/zlib/dotzlib/ChecksumImpl.cs", - "scan/zlib/gcc_gvmat64/gvmat64.S", - "scan/zlib/infback9/infback9.c", - "scan/zlib/infback9/infback9.h", - "scan/zlib/iostream2/zstream.h" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/npm@2.13.5", - "repository_homepage_url": "https://www.npmjs.com/package/npm", - "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "purl": "pkg:npm/npm@2.13.5" } ], "tallies": { @@ -3873,9 +3924,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -3998,9 +4047,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4117,9 +4164,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4189,9 +4234,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4261,9 +4304,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4380,9 +4421,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4452,9 +4491,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4518,9 +4555,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4719,9 +4754,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4838,9 +4871,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -4959,9 +4990,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -5066,9 +5095,7 @@ "holders": [], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -7390,8 +7417,8 @@ "Artistic-2.0" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -8088,14 +8115,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/npm@2.13.5", "repository_homepage_url": "https://www.npmjs.com/package/npm", "repository_download_url": "https://registry.npmjs.org/npm/-/npm-2.13.5.tgz", - "api_data_url": "https://registry.npmjs.org/npm/2.13.5" + "api_data_url": "https://registry.npmjs.org/npm/2.13.5", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/npm@2.13.5" } ], "for_packages": [ - "pkg:npm/npm@2.13.5" + "pkg:npm/npm@2.13.5?uuid=fixed-uid-done-for-testing-5642512d1758" ], "tallies": { "license_expressions": [ @@ -8452,9 +8480,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -8573,9 +8599,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -8694,9 +8718,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -8815,9 +8837,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -8961,9 +8981,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9082,9 +9100,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9271,9 +9287,7 @@ } ], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9456,9 +9470,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9577,9 +9589,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9760,9 +9770,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -9879,9 +9887,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -10000,9 +10006,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { @@ -10121,9 +10125,7 @@ ], "authors": [], "package_data": [], - "for_packages": [ - "pkg:npm/npm@2.13.5" - ], + "for_packages": [], "tallies": { "license_expressions": [ { diff --git a/tests/summarycode/data/tallies/packages/expected.json b/tests/summarycode/data/tallies/packages/expected.json index 6826bb3bde0..d2816cff770 100644 --- a/tests/summarycode/data/tallies/packages/expected.json +++ b/tests/summarycode/data/tallies/packages/expected.json @@ -28,9 +28,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular-devkit/build-optimizer", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular-devkit/build-optimizer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/autoprefixer", @@ -40,9 +41,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/autoprefixer", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/autoprefixer?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chalk", @@ -52,9 +54,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chalk", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/chalk?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/chokidar", @@ -64,9 +67,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/chokidar", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/chokidar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/clean-css", @@ -76,9 +80,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/clean-css", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/clean-css?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/cross-spawn", @@ -88,9 +93,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/cross-spawn", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/cross-spawn?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/express", @@ -100,9 +106,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/express", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/express?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/fs-extra", @@ -112,9 +119,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/fs-extra", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/fs-extra?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/glob", @@ -124,9 +132,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/glob", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/json-loader", @@ -136,9 +145,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/json-loader", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/json-loader?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/node-sass", @@ -148,9 +158,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/node-sass", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/node-sass?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/os-name", @@ -160,9 +171,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/os-name", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/os-name?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/postcss", @@ -172,9 +184,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/postcss", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/postcss?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/proxy-middleware", @@ -184,9 +197,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/proxy-middleware", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/proxy-middleware?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/reflect-metadata", @@ -196,9 +210,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/reflect-metadata", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/reflect-metadata?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rollup", @@ -208,9 +223,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rollup", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rollup?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rollup-plugin-commonjs", @@ -220,9 +236,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rollup-plugin-commonjs", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rollup-plugin-commonjs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rollup-plugin-node-resolve", @@ -232,9 +249,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rollup-plugin-node-resolve", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rollup-plugin-node-resolve?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/source-map", @@ -244,9 +262,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/source-map", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/source-map?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tiny-lr", @@ -256,9 +275,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tiny-lr", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/tiny-lr?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tslint", @@ -268,9 +288,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tslint", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/tslint?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tslint-eslint-rules", @@ -280,9 +301,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tslint-eslint-rules", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/tslint-eslint-rules?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/uglify-es", @@ -292,9 +314,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/uglify-es", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/uglify-es?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/webpack", @@ -304,9 +327,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/webpack", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/webpack?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ws", @@ -316,9 +340,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ws", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/ws?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/xml2js", @@ -328,9 +353,10 @@ "is_optional": false, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/xml2js", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/xml2js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/animations", @@ -340,9 +366,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/animations", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/animations?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/common", @@ -352,9 +379,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/common", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/common?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/compiler", @@ -364,9 +392,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/compiler", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/compiler?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/compiler-cli", @@ -376,9 +405,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/compiler-cli", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/compiler-cli?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/core", @@ -388,9 +418,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/core", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/core?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/forms", @@ -400,9 +431,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/forms", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/forms?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/http", @@ -412,9 +444,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/http", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/http?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/platform-browser", @@ -424,9 +457,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/platform-browser", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/platform-browser?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/platform-browser-dynamic", @@ -436,9 +470,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/platform-browser-dynamic", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/platform-browser-dynamic?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/platform-server", @@ -448,9 +483,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/platform-server", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/platform-server?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40angular/tsc-wrapped", @@ -460,9 +496,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40angular/tsc-wrapped", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40angular/tsc-wrapped?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/chokidar", @@ -472,9 +509,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/chokidar", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/chokidar?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/clean-css", @@ -484,9 +522,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/clean-css", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/clean-css?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/express", @@ -496,9 +535,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/express", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/express?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/fs-extra", @@ -508,9 +548,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/fs-extra", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/fs-extra?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/glob", @@ -520,9 +561,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/glob", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/glob?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/jest", @@ -532,9 +574,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/jest", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/jest?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/mock-fs", @@ -544,9 +587,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/mock-fs", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/mock-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/node", @@ -556,9 +600,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/node", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/node?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/node-sass", @@ -568,9 +613,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/node-sass", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/node-sass?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/rewire", @@ -580,9 +626,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/rewire", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/rewire?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/webpack", @@ -592,9 +639,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/webpack", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/webpack?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/%40types/ws", @@ -604,9 +652,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/%40types/ws", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/%40types/ws?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/conventional-changelog-cli", @@ -616,9 +665,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/conventional-changelog-cli", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/conventional-changelog-cli?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/github", @@ -628,9 +678,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/github", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/github?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/ionic-cz-conventional-changelog", @@ -640,9 +691,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/ionic-cz-conventional-changelog", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/ionic-cz-conventional-changelog?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/jest", @@ -652,9 +704,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/jest", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/jest?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/mock-fs", @@ -664,9 +717,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/mock-fs", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/mock-fs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rewire", @@ -676,9 +730,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rewire", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rewire?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rimraf", @@ -688,9 +743,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rimraf", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rimraf?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/rxjs", @@ -700,9 +756,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/rxjs", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/rxjs?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/sw-toolbox", @@ -712,9 +769,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/sw-toolbox", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/sw-toolbox?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/tslint-ionic-rules", @@ -724,9 +782,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/tslint-ionic-rules", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/tslint-ionic-rules?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/typescript", @@ -736,9 +795,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/typescript", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/typescript?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" }, { "purl": "pkg:npm/zone.js", @@ -748,9 +808,10 @@ "is_optional": true, "is_resolved": false, "resolved_package": {}, - "dependency_uuid": "pkg:npm/zone.js", - "for_package": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "lockfile": "scan/scoped1/package.json" + "dependency_uid": "pkg:npm/zone.js?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "scan/scoped1/package.json", + "datasource_id": "npm_package_json" } ], "packages": [ @@ -777,7 +838,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "public-domain", + "license_expression": "public-domain AND unknown", "declared_license": [ { "name": "Public Domain", @@ -787,22 +848,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], "extra_data": {}, - "package_uuid": "pkg:maven/aopalliance/aopalliance@1.0", - "package_data_files": [ + "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", + "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "package_uid": "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" ], - "files": [ - "scan/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "datasource_ids": [ + "maven_pom" ], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", - "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", - "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "purl": "pkg:maven/aopalliance/aopalliance@1.0" }, { "type": "freebsd", @@ -848,20 +908,19 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", - "package_data_files": [ + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "package_uid": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/freebsd/basic/+COMPACT_MANIFEST" ], - "files": [ - "scan/freebsd/basic/+COMPACT_MANIFEST" + "datasource_ids": [ + "freebsd_compact_manifest" ], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", - "repository_homepage_url": null, - "repository_download_url": null, - "api_data_url": null + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" }, { "type": "npm", @@ -899,20 +958,19 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], "extra_data": {}, - "package_uuid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "package_data_files": [ + "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", + "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", + "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts", + "package_uid": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_paths": [ "scan/scoped1/package.json" ], - "files": [ - "scan/scoped1/package.json" + "datasource_ids": [ + "npm_package_json" ], - "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", - "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", - "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", - "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts" + "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" } ], "tallies": {}, @@ -935,14 +993,18 @@ "path": "scan/aopalliance/aopalliance", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { "path": "scan/aopalliance/aopalliance/1.0", "type": "directory", "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "scan_errors": [] }, { @@ -972,7 +1034,7 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "public-domain", + "license_expression": "public-domain AND unknown", "declared_license": [ { "name": "Public Domain", @@ -982,20 +1044,21 @@ } ], "notice_text": null, - "contains_source_code": null, "source_packages": [ "pkg:maven/aopalliance/aopalliance@1.0?classifier=sources" ], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:maven/aopalliance/aopalliance@1.0", "repository_homepage_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/", "repository_download_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar", - "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom" + "api_data_url": "https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom", + "datasource_id": "maven_pom", + "purl": "pkg:maven/aopalliance/aopalliance@1.0" } ], "for_packages": [ - "pkg:maven/aopalliance/aopalliance@1.0" + "pkg:maven/aopalliance/aopalliance@1.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -1061,18 +1124,19 @@ "licenselogic": "single" }, "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [], - "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode", "repository_homepage_url": null, "repository_download_url": null, - "api_data_url": null + "api_data_url": null, + "datasource_id": "freebsd_compact_manifest", + "purl": "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" } ], "for_packages": [ - "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode" + "pkg:freebsd/dmidecode@2.12?arch=freebsd:10:x86:64&origin=sysutils/dmidecode&uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] }, @@ -1123,8 +1187,8 @@ "MIT" ], "notice_text": null, - "contains_source_code": null, "source_packages": [], + "file_references": [], "extra_data": {}, "dependencies": [ { @@ -1677,14 +1741,15 @@ "resolved_package": {} } ], - "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651", "repository_homepage_url": "https://www.npmjs.com/package/@ionic/app-scripts", "repository_download_url": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.1-201710301651.tgz", - "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts" + "api_data_url": "https://registry.npmjs.org/@ionic%2fapp-scripts", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" } ], "for_packages": [ - "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651" + "pkg:npm/%40ionic/app-scripts@3.0.1-201710301651?uuid=fixed-uid-done-for-testing-5642512d1758" ], "scan_errors": [] } diff --git a/tests/summarycode/test_plugin_consolidate.py b/tests/summarycode/test_plugin_consolidate.py index a61179c7944..be3fa57b138 100644 --- a/tests/summarycode/test_plugin_consolidate.py +++ b/tests/summarycode/test_plugin_consolidate.py @@ -19,18 +19,12 @@ class TestConsolidate(FileDrivenTesting): test_data_dir = path.join(path.dirname(__file__), 'data') - def get_scan(self, test_loc, cli_options='-clip'): - scan_loc = self.get_test_loc(test_loc) - scan_file = self.get_temp_file('json') - run_scan_click(['-clip', scan_loc, '--json', scan_file]) - return scan_file - def test_consolidate_package(self): scan_loc = self.get_test_loc('plugin_consolidate/package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin_consolidate/package-fileset-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_package_files_should_not_be_considered_in_license_holder_consolidated_component(self): scan_loc = self.get_test_loc('plugin_consolidate/package-files-not-counted-in-license-holders') @@ -40,45 +34,35 @@ def test_consolidate_package_files_should_not_be_considered_in_license_holder_co # expression and holder expected_file = self.get_test_loc('plugin_consolidate/package-files-not-counted-in-license-holders-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_component_package_from_json_can_run_twice(self): - scan_file = self.get_scan('plugin_consolidate/component-package', cli_options='-clip') + scan_loc = self.get_test_loc('plugin_consolidate/component-package') + scan_file = self.get_temp_file('json') + run_scan_click(['-clip', scan_loc, '--json', scan_file]) expected_file = self.get_test_loc('plugin_consolidate/component-package-expected.json') - result_file = self.get_temp_file('json') run_scan_click(['--from-json', scan_file, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) - + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + # rerun with result_file from last run result_file2 = self.get_temp_file('json') run_scan_click(['--from-json', result_file, '--consolidate', '--json', result_file2]) - check_json_scan(expected_file, result_file2, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file2, remove_uuid=True, regen=False, remove_file_date=True) def test_consolidate_component_package_from_live_scan(self): scan_loc = self.get_test_loc('plugin_consolidate/component-package') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin_consolidate/component-package-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_package_always_include_own_manifest_file(self): scan_loc = self.get_test_loc('plugin_consolidate/package-manifest') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin_consolidate/package-manifest-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) - - def test_get_package_resources_on_nested_packages_should_include_manifest(self): - from packagedcode import get_package_instance - from commoncode.resource import VirtualCodebase - scan_file = self.get_scan('plugin_consolidate/nested-packages', cli_options='-p') - codebase = VirtualCodebase(scan_file) - for resource in codebase.walk(): - for package_data in resource.package_data: - package = get_package_instance(package_data) - package_resources = list(package.get_package_resources(resource, codebase)) - assert any(r.name == 'package.json' for r in package_resources), resource.path + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_multiple_same_holder_and_license(self): scan_loc = self.get_test_loc('plugin_consolidate/multiple-same-holder-and-license') @@ -110,14 +94,14 @@ def test_consolidate_component_package_build_from_live_scan(self): result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin_consolidate/component-package-build-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_report_minority_origin_directory(self): scan_loc = self.get_test_loc('plugin_consolidate/report-subdirectory-with-minority-origin') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('plugin_consolidate/report-subdirectory-with-minority-origin-expected.json') run_scan_click(['-clip', scan_loc, '--consolidate', '--json', result_file]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) + check_json_scan(expected_file, result_file, remove_uuid=True, regen=REGEN_TEST_FIXTURES, remove_file_date=True) def test_consolidate_zlib(self): scan_loc = self.get_test_loc('plugin_consolidate/zlib.json') diff --git a/tests/summarycode/test_summarizer.py b/tests/summarycode/test_summarizer.py index b0250587ee1..62ea213130c 100644 --- a/tests/summarycode/test_summarizer.py +++ b/tests/summarycode/test_summarizer.py @@ -39,7 +39,7 @@ def test_end2end_summary_and_classify_works_with_empty_dir_and_empty_values(self '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_license_ambiguity_unambiguous(self): test_dir = self.get_test_loc('summary/license_ambiguity/unambiguous') @@ -51,7 +51,7 @@ def test_summary_license_ambiguity_unambiguous(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_license_ambiguity_ambiguous(self): test_dir = self.get_test_loc('summary/license_ambiguity/ambiguous') @@ -63,7 +63,7 @@ def test_summary_license_ambiguity_ambiguous(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_single_file_with_origin_info(self): test_dir = self.get_test_loc('summary/single_file/codebase') @@ -75,7 +75,7 @@ def test_summary_single_file_with_origin_info(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_conflicting_license_categories(self): test_dir = self.get_test_loc('summary/conflicting_license_categories/codebase') @@ -87,7 +87,7 @@ def test_summary_conflicting_license_categories(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_with_package_data(self): test_dir = self.get_test_loc('summary/with_package_data/codebase') @@ -99,7 +99,7 @@ def test_summary_with_package_data(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_without_package_data(self): test_dir = self.get_test_loc('summary/without_package_data/codebase') @@ -111,7 +111,7 @@ def test_summary_without_package_data(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_multiple_package_data(self): test_dir = self.get_test_loc('summary/multiple_package_data/codebase') @@ -123,7 +123,7 @@ def test_summary_multiple_package_data(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_clear_holder(self): test_dir = self.get_test_loc('summary/holders/clear_holder') @@ -135,7 +135,7 @@ def test_summary_clear_holder(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_combined_holders(self): test_dir = self.get_test_loc('summary/holders/combined_holders') @@ -147,7 +147,7 @@ def test_summary_combined_holders(self): '--classify', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_remove_from_tallies(self): tallies = [ diff --git a/tests/summarycode/test_tallies.py b/tests/summarycode/test_tallies.py index 40d0c7c70cb..9875048339b 100644 --- a/tests/summarycode/test_tallies.py +++ b/tests/summarycode/test_tallies.py @@ -60,14 +60,14 @@ def test_full_summary_base(self): result_file = self.get_temp_file('json') expected_file = self.get_test_loc('tallies/full_tallies/tallies.expected.json') run_scan_click(['-clip', '--tallies', '--json-pp', result_file, test_dir]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_full_summary_with_details(self): test_dir = self.get_test_loc('tallies/full_tallies/scan') result_file = self.get_temp_file('json') expected_file = self.get_test_loc('tallies/full_tallies/tallies_details.expected.json') run_scan_click(['-clip', '--tallies-with-details', '--json-pp', result_file, test_dir]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_copyright_summary_key_files(self): test_dir = self.get_test_loc('tallies/copyright_tallies/scan') @@ -113,7 +113,7 @@ def test_full_summary_by_facet(self): '--tallies-by-facet', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_end2end_summary_and_classify_works_with_empty_dir_and_empty_values(self): test_dir = self.extract_test_tar('tallies/end-2-end/bug-1141.tar.gz') @@ -127,7 +127,7 @@ def test_end2end_summary_and_classify_works_with_empty_dir_and_empty_values(self '--tallies-key-files', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) def test_summary_with_packages_reports_packages_with_files(self): test_dir = self.get_test_loc('tallies/packages/scan') @@ -138,4 +138,4 @@ def test_summary_with_packages_reports_packages_with_files(self): '--tallies', '--json-pp', result_file, test_dir ]) - check_json_scan(expected_file, result_file, remove_instance_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) + check_json_scan(expected_file, result_file, remove_uuid=True, remove_file_date=True, regen=REGEN_TEST_FIXTURES) From ba7dd22669ec340a09e9fb7efee3ccd816c02dc1 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:34:17 +0200 Subject: [PATCH 35/36] Remove skeleton test suite Signed-off-by: Philippe Ombredanne --- tests/test_skeleton_codestyle.py | 36 -------------------------------- 1 file changed, 36 deletions(-) delete mode 100644 tests/test_skeleton_codestyle.py diff --git a/tests/test_skeleton_codestyle.py b/tests/test_skeleton_codestyle.py deleted file mode 100644 index 2eb6e558fcb..00000000000 --- a/tests/test_skeleton_codestyle.py +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) nexB Inc. and others. All rights reserved. -# ScanCode is a trademark of nexB Inc. -# SPDX-License-Identifier: Apache-2.0 -# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. -# See https://github.com/nexB/skeleton for support or download. -# See https://aboutcode.org for more information about nexB OSS projects. -# - -import subprocess -import unittest -import configparser - - -class BaseTests(unittest.TestCase): - def test_skeleton_codestyle(self): - """ - This test shouldn't run in proliferated repositories. - """ - setup_cfg = configparser.ConfigParser() - setup_cfg.read("setup.cfg") - if setup_cfg["metadata"]["name"] != "skeleton": - return - - args = "venv/bin/black --check -l 100 setup.py etc tests" - try: - subprocess.check_output(args.split()) - except subprocess.CalledProcessError as e: - print("===========================================================") - print(e.output) - print("===========================================================") - raise Exception( - "Black style check failed; please format the code using:\n" - " python -m black -l 100 setup.py etc tests", - e.output, - ) from e From 8e07301dbf496fad70277dab7a2ff4788ec74a83 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sat, 23 Apr 2022 22:35:39 +0200 Subject: [PATCH 36/36] Add doc on expected test file regeneration Using the new SCANCODE_REGEN_TEST_FIXTURES Signed-off-by: Philippe Ombredanne --- docs/source/contribute/contrib_dev.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/source/contribute/contrib_dev.rst b/docs/source/contribute/contrib_dev.rst index 06b9f33e3f5..2fc6ba5db2d 100644 --- a/docs/source/contribute/contrib_dev.rst +++ b/docs/source/contribute/contrib_dev.rst @@ -109,7 +109,30 @@ These are enabled by adding a ``--test-suite`` option to the pytest command. extensive data-driven and data validations (for package, copyright and license detection) +In some cases we need to regenerate test data when expected behavious/result data +structures change, and we have an environement variable to regenerate test data. +`SCANCODE_REGEN_TEST_FIXTURES` is present in `scancode_config` and this can be +set to regenerate test data for specific tests like this: +``SCANCODE_REGEN_TEST_FIXTURES=yes pytest -vvs tests/packagedcode/test_package_models.py`` + +This command will only regenerate test data for only the tests in `test_package_models.py`, +and we can further specify the tests to regen by using more pytest options like `--lf` and +`-k test_instances`. + +If test data is regenerated, it is important to review the diff for test files and +carefully go through all of it to make sure there are no unintended changes there, +and then commit all the regenerated test data. + +To help debug in scancode, we use logging. There are different environement variables +you need to set to turn on logging. In packagedcode:: + +``SCANCODE_DEBUG_PACKAGE=yes pytest -vvs tests/packagedcode/ --lf`` + +Or set the ``TRACE`` variable to ``True``. This enables ``logger_debug`` functions +logging variables and shows code execution paths by logging and printing the logs +in the terminal. If debugging full scans run by click, you have to raise exceptions +in addition to setting the TRACE to enable logging. .. _scancode_toolkit_development_thirdparty_libraries:

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 X0Ry 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